獲取正在運(yùn)行的Service

[TOC]

需求

當(dāng)我們開啟一個(gè)服務(wù)運(yùn)行的時(shí)候(查詢來(lái)電歸屬地),但是可能會(huì)被用戶自行停止服務(wù),或者被用戶的安(liu)全(mang)軟件殺掉。那么我們需要查看自已的服務(wù)有沒有殺掉。

  1. Setting_Activity:一個(gè)CheckBox勾選后開啟Service,設(shè)置CheckBox狀態(tài)為勾選
  2. Service被殺掉,此時(shí)CheckBox狀態(tài)仍為勾選
  3. 進(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));
  }
    }
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容