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,问题弱请不要笑。。