一、目标

  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选中状态相关推荐

  1. Android实例-手机安全卫士(三十五)-来电号码显示归属地

    一.目标 1.显示来电号码的归属地: 2.可在"设置中心"设置"是否启用来电号码归属地显示" 二.代码实现 (以服务的形式监听来电状态) 1.在项目服务包中新增 ...

  2. Android实例-手机安全卫士(二十四)-绑定SIM卡

    一.目标. 使用TelephonyManager对象获取手机相关信息,用SharedPreferences对象保存配置信息. 二.代码实现. 1.为"绑定SIM卡"按钮添加id(取 ...

  3. Android 天气APP(三十六)运行到本地AS、更新项目版本依赖、去掉ButterKnife

    运行到本地AS.更新项目版本依赖.去掉ButterKnife 前言 正文 一.新版Android Studio编译运行 ① 升级项目gradle版本 ② 切换JDK版本 ③ BuildConfig报错 ...

  4. Android实例-手机安全卫士(一)-启动界面

    一.目标. 1.启动时全屏显示,并获得当前应用版本号: 2.美化字体:颜色和文字阴影: 3.添加一个ProgressBar以增加用户体验. 效果如图 二.编写过程. 1.布局.在布局文件中增加一个Te ...

  5. Android开发笔记(三十六)展示类控件

    View/ViewGroup View是单个视图,所有的控件类都是从它派生出来:而ViewGroup是个视图组织,所有的布局视图类都是从它派生出来.由于View和ViewGroup是基类,因此很少会直 ...

  6. Android实例-手机安全卫士(四十一)-选择自定义Toast背景

    一.目标 通过对话框选择并保存自定义的Toast背景        二.代码实现 1.复制layout文件夹中的model_setting_item.xml文件,以其为模板进行修改(取名为model_ ...

  7. Android实例-手机安全卫士(十一)-自定义对话框点击事件处理

    一.目标 在弹出的自定义对话框中,当点击"确认"时,保存密码,关闭对话框:当点击"取消"时关闭对话框.同时,如果不输入密码或输入密码错误则弹出相应的提示. 二. ...

  8. Android项目实战(三十六):给背景加上阴影效果

    圆角背景大家应该经常用: 一个drawable资源文件  里面控制corner圆角 和solid填充色 <shape xmlns:android="http://schemas.and ...

  9. 实例三十六:精确除法计算(*)

    实例三十六:精确除法计算 问题描述: 使用数组精确计算 M/N(0<M<N<100)的值.如果 M/N 是无限循环小数,则计算输出它的第一个循环节,并输出循环节的起止位置. The ...

最新文章

  1. docker-compose安装部署ELK
  2. 一种基于游戏引擎的AR模式探讨(下)
  3. JavaScript DOM操作 提高篇
  4. 统计百度网盘文件个数 V3
  5. oracle数据库建语句吗,Oracle建表语句是什么_数据库
  6. unity3D禁用脚本
  7. php 开发工具 sublime,PHP日常开发工具-Sublime应用
  8. Mysql的一揽子方案用法
  9. 1、贪心NLP——课程介绍及NLP概论
  10. BZOJ 4567: [Scoi2016]背单词
  11. css-盒子模型border-box
  12. 阿里云acp认证, 阿里云acp考试介绍
  13. EF An error occurred while updating the entries. See the inner exception for details.
  14. linux V4L2子系统——v4l2架构(3)之video_device
  15. 【背板子-后缀数组】BZOJ4199 BZOJ4650 LGP5108 CF504E
  16. RS485保护电路的设计
  17. Linux 系统管理 : last 命令详解
  18. 雷士照明股权连环局(第一、二、三季完整版)
  19. 创建网页实现上传文件(简明教程)
  20. 施耐德电气在北京落成中国第二家智慧工厂

热门文章

  1. 排序系列之---冒泡排序
  2. java 如何跟多个字符串比较_Stack Overflow上370万浏览量的一个问题:如何比较Java的字符串...
  3. java二维数组排序先行后列,数组知识点归纳
  4. 如何用python计算levenshteindistance_Levenshtein计算相似度距离
  5. 文本留言 php,一个php作的文本留言本的例子(一)
  6. php扩展返回字符数组,PHP扩展之数组字符串处理
  7. capture 部分元器件编号_十大电子元器件及其相关基础知识
  8. # 解析bt文件_磁力链接和BT种子使用方法
  9. hybrid7 宝马active_【图】宝马ActiveHybrid7系 动力节能完美结合_汽车之家
  10. C++ 流类和流对象