问题描述
- adroid新手,service的一些问题
-
service类:
public class PhoneListenerService extends Service {@Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { Log.e("TAG", "service onCreate()"); super.onCreate(); //电话服务管理 TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); //监听电话状态 manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); } private PhoneStateListener listener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); //打印电话状态改变信息 Log.e("TAG", "onCallStateChanged state = " + state); switch (state) { case TelephonyManager.CALL_STATE_IDLE: Log.e("TAG", "onCallStateChanged state = " + state); break; case TelephonyManager.CALL_STATE_RINGING: Log.e("TAG", "onCallStateChanged state = " + state); break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.e("TAG", "onCallStateChanged state = " + state); break; default: break; } } };
}
MainActivity:
public class MainActivity extends Activity {
private Button btnStartListening;
TelephonyManager manager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);btnStartListening = (Button)findViewById(R.id.btnStartListening); btnStartListening.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { changeState(); } }); } public void changeState() { if (isServiceRunning(getApplicationContext(),"edwardlol.listenertest.PhoneListenerService")) { Log.e("TAG","is running, now stop"); Intent i = new Intent(getApplicationContext(), PhoneListenerService.class); stopService(i); btnStartListening.setText("start"); } else { Log.e("TAG","is not running, now start"); Intent i = new Intent(getApplicationContext(), PhoneListenerService.class); startService(i); btnStartListening.setText("stop"); } } private boolean isServiceRunning(Context mContext,String className) { boolean isRunning = false; ActivityManager activityManager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningServiceInfo> serviceList = activityManager.getRunningServices(30); if (!(serviceList.size()>0)) { return false; } for (int i=0; i<serviceList.size(); i++) { if (serviceList.get(i).service.getClassName().equals(className)) { isRunning = true; break; } } return isRunning; }
}
如上,本想在mainactivity中开始和停止PhoneListenerService
但是停止了服务后打入电话还是能打印log信息,即service中的listener还在工作
而且每条log信息都会出现两次
请教下是什么问题?
刚开始接触android,问题弱请不要笑。。
解决方案
老眼昏花了 两个问题已经解决
解决方案二:
先把生命周期 写好,然后在向里面放程序
解决方案三:
使用bindservice的话,要执行stop和unbind才能停止service
时间: 2024-08-02 11:40:39