[TOC]
需求
當我們開啟一個服務運行的時候(查詢來電歸屬地),但是可能會被用戶自行停止服務邮屁,或者被用戶的安(liu)全(mang)軟件殺掉整袁。那么我們需要查看自已的服務有沒有殺掉。
- Setting_Activity:一個CheckBox勾選后開啟Service佑吝,設置CheckBox狀態(tài)為勾選
- Service被殺掉坐昙,此時CheckBox狀態(tài)仍為勾選
- 進入Setting_Activity界面時,CheckBox被勾選芋忿,但Service并未運行
邏輯
- 進入Setting_Activity炸客,檢查自已的Service的運行狀態(tài)盗飒,是否正在運行
- 正在運行嚷量,設置CheckBox為勾選狀態(tài)
- 未運行,設置CheckBox為未勾選狀態(tài)
代碼
判斷Service運行邏輯
public class ServiceRunning {
/*
判斷service是否運行
*/ public static boolean isRun(Context context,String serviceName){
ActivityManager mActivityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> runServiceList = mActivityManager
.getRunningServices(100);
for (ActivityManager.RunningServiceInfo info:runServiceList){
System.out.println(info.service.getClassName());
String name=info.service.getClassName();
if (serviceName.equals(name)){
return true;
}
}
return false;
}
}
Service邏輯
public class comPhone extends Service {
private TelephonyManager telephonyManager;
private Mylisten mylisten;
@Nullable
@Override public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
telephonyManager= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
mylisten=new Mylisten();
telephonyManager.listen(mylisten,PhoneStateListener.LISTEN_CALL_STATE);
}
class Mylisten extends PhoneStateListener{
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch(state){
//電話等待接聽
case TelephonyManager.CALL_STATE_RINGING:
System.out.println(AddressDao.getAdress(incomingNumber));
break; //電話接聽
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
//電話掛機
case TelephonyManager.CALL_STATE_IDLE:
break;
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
telephonyManager.listen(mylisten,TelephonyManager.PHONE_TYPE_NONE);
}
}
Setting_Activity的Checkbox啟動(關閉)服務
boolean running=ServiceRunning.isRun(this,"com.phonesafe.service.comPhone");
if (running){
set_item1.setCheck(true);
}else {
set_item1.setCheck(false);
}
isUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isUpdate.isChecked()){
set_item1.setCheck(true);
Intent start=new Intent(Setting.this,comPhone.class);
startService(start);
}else{
set_item1.setCheck(false);
stopService(new Intent(Setting.this,comPhone.class));
}
}
});