[TOC]
需求
當(dāng)我們開啟一個(gè)服務(wù)運(yùn)行的時(shí)候(查詢來(lái)電歸屬地),但是可能會(huì)被用戶自行停止服務(wù),或者被用戶的安(liu)全(mang)軟件殺掉。那么我們需要查看自已的服務(wù)有沒有殺掉。
- Setting_Activity:一個(gè)CheckBox勾選后開啟Service,設(shè)置CheckBox狀態(tài)為勾選
- Service被殺掉,此時(shí)CheckBox狀態(tài)仍為勾選
- 進(jìn)入Setting_Activity界面時(shí),CheckBox被勾選,但Service并未運(yùn)行
邏輯
- 進(jìn)入Setting_Activity,檢查自已的Service的運(yùn)行狀態(tài),是否正在運(yùn)行
- 正在運(yùn)行,設(shè)置CheckBox為勾選狀態(tài)
- 未運(yùn)行,設(shè)置CheckBox為未勾選狀態(tài)
代碼
判斷Service運(yùn)行邏輯
public class ServiceRunning {
/*
判斷service是否運(yùn)行
*/ 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;
//電話掛機(jī)
case TelephonyManager.CALL_STATE_IDLE:
break;
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
telephonyManager.listen(mylisten,TelephonyManager.PHONE_TYPE_NONE);
}
}
Setting_Activity的Checkbox啟動(dòng)(關(guān)閉)服務(wù)
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));
}
}
});