Android執行個體-手機安全衛士(三十六)-根據Service是否開啟確定CheckBox選中狀態

來源:互聯網
上載者:User

標籤:

一、目標

  1、根據service是否在後台運行情況來確定CheckBox的選中狀態;

  2、解決"設定中心"的“開啟來電號碼顯示歸屬地”功能在退出程式再進入時選中狀態消失,在工作管理員中關閉“來顯”服務時,功能仍為選中狀態

二、代碼實現

  1、在src檔案下建立一個包(取名com.example.mobilesafe.utils)用於存放各種工具類;

  2、在工具類包下建立類(取名ServiceUtils,無需繼承任何類),用於校正某個服務是否在正常運行(開啟);在建立類(ServiceUtils)中建立傳回值類型為boolean類型的靜態方法(取名isServiceRunning,用於檢驗服務是否正常運行),傳入參數兩個分別是上下文(Context,因為在該方法中需通過上下文得到系統服務)和指定要校正是否正常啟動並執行服務名稱(String類型的參數),在檢驗服務的靜態方法中:

    (1)通過內容相關的getSystemService(String name)方法得到系統服務,由參數name擷取Activity和Service狀態(即name參數值為Context.ACTIVITY_SERVICE),強轉,該方法返回ActivityManager對象(取名am);

    (2)通過ActivityManager對象(am)的getRunningServices(int maxNum)方法擷取正在啟動並執行服務的資訊集合對象List<RunningServiceInfo>(取名serviceInfos);

    (3)通過增強for迴圈遍曆服務資訊集合(serviceInfos),在增強for迴圈中:

      ①通過正在運行服務資訊對象RunningServiceInfo(取名info)的service擷取服務元件,再通過組件的getClassName()擷取服務名稱,返回String對象(取名name);

      ②通過if語句判斷傳入的服務名稱(即2中的靜態方法第二個傳入參數)是否等於(equal()方法)擷取的服務名稱相等則返回true;

    (4)返回false;

建立的服務是否正在運行類和靜態檢驗方法代碼如下:

 1 public class ServiceUtils { 2      3     /** 4      * 檢驗某個服務是否還在正常運行      5      * @param context:需要關聯的上下文 6      * @param serviceName:需要檢驗的服務全路徑名稱 7      * @return 8      */ 9     public static boolean isServiceRunning (Context context,String serviceName){10         //檢驗服務是否正常運行        11         ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);12         List<RunningServiceInfo>  serviceInfos = am.getRunningServices(100);13         for(RunningServiceInfo info:serviceInfos){14             String name = info.service.getClassName();15             if(serviceName.equals(name)){16                 return true;17             }18         }19         return false;20     }21 }
View Code

 

  3、在“設定中心”的頁面代碼(SettingActivity)中“設定是否開啟來電號碼歸屬地顯示功能”模板中通過new Intent(this,ShowComingPhoneAdd.class)執行個體化一個Intent對象(名稱為showAddIntent)之後,通過2中建立的工具類(ServiceUtils)的校正某個服務是否在正常運行方法isServiceRunning(Context context, String serviceName)(即建立的靜態方法)檢驗指定的服務是否正在運行,參數context上下文即為“設定中心”類的上下文(SettingActivity.this),參數serviceName服務名稱即為Intent執行個體化時傳入的服務(需使用全路徑名稱,即com.example.mobilesafe.service.ShowComingPhoneAdd)。該方法傳回值類型為boolean(取名isServiceRunning)。

  4、通過if...else...語句和isServiceRunning條件判斷指定的服務是否正在運行,若正在運行則設定單選框為選中狀態,若未運行則設定單選框為空白狀態;

“設定中心”頁面中新增部分代碼:

 1 //(這句是新增代碼前的語句)showAddIntent = new Intent(this,ShowComingPhoneAdd.class); 2 //根據自訂的服務是否運行檢驗方法判斷“來電號碼歸屬地顯示服務(ShowComingPhoneAdd)”是否正在運行 3         boolean idServiceRunning = ServiceUtils.isServiceRunning(SettingActivity.this, "com.example.mobilesafe.service.ShowComingPhoneAdd"); 4         if(idServiceRunning){ 5             //服務正在運行,設定顯示功能為選中狀態 6             setting_show_incoming_add.setChecked(true); 7         }else{ 8             //服務未運行,設定顯示功能為空白狀態 9             setting_show_incoming_add.setChecked(false);10         }    
View Code

 

Android執行個體-手機安全衛士(三十六)-根據Service是否開啟確定CheckBox選中狀態

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.