获取正在运行的Service

[TOC]

需求

当我们开启一个服务运行的时候(查询来电归属地),但是可能会被用户自行停止服务,或者被用户的安(liu)全(mang)软件杀掉。那么我们需要查看自已的服务有没有杀掉。

  1. Setting_Activity:一个CheckBox勾选后开启Service,设置CheckBox状态为勾选
  2. Service被杀掉,此时CheckBox状态仍为勾选
  3. 进入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 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));
  }
    }
});

你可能感兴趣的:(获取正在运行的Service)