[TOC]
需求
当我们开启一个服务运行的时候(查询来电归属地),但是可能会被用户自行停止服务,或者被用户的安(liu)全(mang)软件杀掉。那么我们需要查看自已的服务有没有杀掉。
- Setting_Activity:一个CheckBox勾选后开启Service,设置CheckBox状态为勾选
- Service被杀掉,此时CheckBox状态仍为勾选
- 进入Setting_Activity界面时,CheckBox被勾选,但Service并未运行
逻辑
- 进入Setting_Activity,检查自已的Service的运行状态,是否正在运行
- 正在运行,设置CheckBox为勾选状态
- 未运行,设置CheckBox为未勾选状态
代码
判断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));
}
}
});