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 }

  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         }    

时间: 2024-10-09 12:12:34

Android实例-手机安全卫士(三十六)-根据Service是否开启确定CheckBox选中状态的相关文章

Android实例-手机安全卫士(十八)-完成设置向导的4个UI和跳转事件

一.目标. 制作向导设置里面每一步的UI布局及点击事件控制. 1.使用自定义button背景.自定义组合控件.自定义文本样式等. 2.利用SharedPreferences对象,设置应用程序配置信息(向导设置完成后就不再进入)           二.代码实现. 1.在程序包下新建另外3个UI的类(分别为SetupWizard_ui_2.java.SetupWizard_ui_3.java.SetupWizard_ui_4.java),并在配置文件中注册Activity. 2.根据UI设计,在设

Android实例-手机安全卫士(十)-自定义对话框

一.目标. 当点击“手机防盗”时弹出自定义的设置密码对话框.如果已经设置密码,则弹出自定义的输入密码对话框. 二.代码实现. 1.在layout文件夹下新建xml(取名setpwddialog.xml)文件用于设置自定义对话框的UI. 新建xml文件代码如下; 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.a

Android实例-手机安全卫士(十四)-为密码进行MD5加密

一.目标. 将设置的密码通过MD5加密后再保存. 二.代码实现. 1.在自定义工具包(com.example.mobilesafe.ui)中新增一个类(取名MD5Utils).在新建类(MD5Utils)中新建一个返回值为String类型的public的静态方法(取名mD5Encryption),传入参数为String类型(password). 2.在新建的方法(md5Encryption)中: ①.通过消息摘要器对象(MessageDigest)的getInstance(String algo

Android实例-手机安全卫士(十二)-制作输入密码对话框并设置相应点击事件

一.目标. 自定义输入密码对话框,根据输入的密码与保存着的密码进行判断. 二.代码实现. 1. 采用第十节的方法自定义一个输入密码的对话框. 2.为按钮设置点击事件,主要介绍“确认”按钮的点击事件. ①.通过TextView对象的getText()得到文本并通过toString()转成字符串再通过trim()去除空格,得到String对象的输入密码: ②.通过SharedPreferences对象的getString(String key, String defValue)获得保存着的密码,参数

Android实例-手机安全卫士(十五)-由主界面进入手机防盗界面

一.目标 1.在主界面中通过“设置防盗密码”或者“输入防盗密码”后,对话框消失,并进入”手机防盗界面“. 2.进入是”手机防盗界面“时,根据有无完成”手机防盗设置向导“的情况进入不同的界面.若未完成,则进入向导界面,若已完成,则进入防盗界面.          二.代码实现. 1.在程序包(com.example.mobilesafe)下新建两个Activity(分别取名SecurityActivity和SetupWizard),并在配置文件(AndroidManifest.xml)中完成注册.

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

原文:Android项目实战(三十六):给背景加上阴影效果 圆角背景大家应该经常用: 一个drawable资源文件  里面控制corner圆角 和solid填充色 <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="@dimen/dp_2"></corners> <solid android:c

Android实例-手机安全卫士(三)-设计主页面UI

一.目标. 主界面UI如图所示: 方面是一个功能列表提示框(采用TextView),下面是功能列表(采用GridView). 二.代码实现. 1.在主界面布局文件(activity_home.xml)中增加组件.主界面布局文件(activity_home.xml)采用线性布局,上面一个TextView,根据UI设置相应属性:下面一个是GridView,通过android:numColumns属性设置该组件的列数,由于GridView还需要inflate单个布局文件,所以为其设置id. 主界面布局

Android实例-手机安全卫士(二十七)—读取联系人号码

一.目标 1.将“二十六”介绍的读取联系人的方法移植到项目中: 2.选取读取到的联系人条目,将其号码自动填入文本框中(通过Intent方式在Activity之间传递数据). 二.代码实现. 1.将读取联系人方法移植到项目中. ①.在主程序包(mobilesafe)下新建选择联系人类(SelectContactActivity),并在布局文件夹中(layout)新建”选择联系人“的布局文件(activity_select_contact.xml).布局文件各联系人信息采用ListView组件显示.

Android实例-手机安全卫士(九)-自定义组合控件的属性

一.目标. 在布局文件中使用自定义控件时,直接在属性中设置值,类似于在TextView控件中设置text属性来显示文本. 效果如图:      属性设置: 二.代码实现. 1.自定义命名空间,类似于TextView控件里面android:text属性前的android.在需要放置自定义控件的布局文件的布局方式(LinearLayout.RelativeLayout等均可)属性里,参照android的命名空间样式增加自定义的命名空间,其名称可以随便取(本例中取名custom),代码是:xmlns: