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选中状态相关推荐
- Android实例-手机安全卫士(三十五)-来电号码显示归属地
一.目标 1.显示来电号码的归属地: 2.可在"设置中心"设置"是否启用来电号码归属地显示" 二.代码实现 (以服务的形式监听来电状态) 1.在项目服务包中新增 ...
- Android实例-手机安全卫士(二十四)-绑定SIM卡
一.目标. 使用TelephonyManager对象获取手机相关信息,用SharedPreferences对象保存配置信息. 二.代码实现. 1.为"绑定SIM卡"按钮添加id(取 ...
- Android 天气APP(三十六)运行到本地AS、更新项目版本依赖、去掉ButterKnife
运行到本地AS.更新项目版本依赖.去掉ButterKnife 前言 正文 一.新版Android Studio编译运行 ① 升级项目gradle版本 ② 切换JDK版本 ③ BuildConfig报错 ...
- Android实例-手机安全卫士(一)-启动界面
一.目标. 1.启动时全屏显示,并获得当前应用版本号: 2.美化字体:颜色和文字阴影: 3.添加一个ProgressBar以增加用户体验. 效果如图 二.编写过程. 1.布局.在布局文件中增加一个Te ...
- Android开发笔记(三十六)展示类控件
View/ViewGroup View是单个视图,所有的控件类都是从它派生出来:而ViewGroup是个视图组织,所有的布局视图类都是从它派生出来.由于View和ViewGroup是基类,因此很少会直 ...
- Android实例-手机安全卫士(四十一)-选择自定义Toast背景
一.目标 通过对话框选择并保存自定义的Toast背景 二.代码实现 1.复制layout文件夹中的model_setting_item.xml文件,以其为模板进行修改(取名为model_ ...
- Android实例-手机安全卫士(十一)-自定义对话框点击事件处理
一.目标 在弹出的自定义对话框中,当点击"确认"时,保存密码,关闭对话框:当点击"取消"时关闭对话框.同时,如果不输入密码或输入密码错误则弹出相应的提示. 二. ...
- Android项目实战(三十六):给背景加上阴影效果
圆角背景大家应该经常用: 一个drawable资源文件 里面控制corner圆角 和solid填充色 <shape xmlns:android="http://schemas.and ...
- 实例三十六:精确除法计算(*)
实例三十六:精确除法计算 问题描述: 使用数组精确计算 M/N(0<M<N<100)的值.如果 M/N 是无限循环小数,则计算输出它的第一个循环节,并输出循环节的起止位置. The ...
最新文章
- docker-compose安装部署ELK
- 一种基于游戏引擎的AR模式探讨(下)
- JavaScript DOM操作 提高篇
- 统计百度网盘文件个数 V3
- oracle数据库建语句吗,Oracle建表语句是什么_数据库
- unity3D禁用脚本
- php 开发工具 sublime,PHP日常开发工具-Sublime应用
- Mysql的一揽子方案用法
- 1、贪心NLP——课程介绍及NLP概论
- BZOJ 4567: [Scoi2016]背单词
- css-盒子模型border-box
- 阿里云acp认证, 阿里云acp考试介绍
- EF An error occurred while updating the entries. See the inner exception for details.
- linux V4L2子系统——v4l2架构(3)之video_device
- 【背板子-后缀数组】BZOJ4199 BZOJ4650 LGP5108 CF504E
- RS485保护电路的设计
- Linux 系统管理 : last 命令详解
- 雷士照明股权连环局(第一、二、三季完整版)
- 创建网页实现上传文件(简明教程)
- 施耐德电气在北京落成中国第二家智慧工厂
热门文章
- 排序系列之---冒泡排序
- java 如何跟多个字符串比较_Stack Overflow上370万浏览量的一个问题:如何比较Java的字符串...
- java二维数组排序先行后列,数组知识点归纳
- 如何用python计算levenshteindistance_Levenshtein计算相似度距离
- 文本留言 php,一个php作的文本留言本的例子(一)
- php扩展返回字符数组,PHP扩展之数组字符串处理
- capture 部分元器件编号_十大电子元器件及其相关基础知识
- # 解析bt文件_磁力链接和BT种子使用方法
- hybrid7 宝马active_【图】宝马ActiveHybrid7系 动力节能完美结合_汽车之家
- C++ 流类和流对象