Android实例-手机安全卫士(三十六)-根据Service是否开启确定CheckBox选中状态
一、目標
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? 5、解決當應用最小化后通過任務管理器殺死服務后,回至應用時仍為選中的問題。在“設置中心”的頁面代碼(SettingActivity)中復寫“onResume()”方法,在該方法中重復第3、4步。
轉載于:https://www.cnblogs.com/Red-Shark/p/4466541.html
總結
以上是生活随笔為你收集整理的Android实例-手机安全卫士(三十六)-根据Service是否开启确定CheckBox选中状态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python成长之路_装饰器
- 下一篇: 单元测试概念记录