1、主要内容

本章记录几段常用代码:
1、如何使用AlarmManager守护服务
2、如何判断某服务是否正在运行
2、如何暂时禁用Android的组件

2、使用AlarmManager守护服务

BootReceiver.java
@Override
public void onReceive(Context context, Intent intent) {
//接收开机启动广播,启动服务,开启alarm定时任务
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
//xxx.class我们要守护的服务
Intent serviceIntent = new Intent(context, xxxx.class);
context.startService(serviceIntent);
startAlarmEvent(context);
}
//监听自定义广播,开启alarm定时任务
if (intent.getAction().equals("xxxxx")) {
startAlarmEvent(context);
} //监听自定义广播,关闭alarm定时任务
if (intent.getAction().equals("cn.zcgames.ghostclaw.action.STOP_SERVICE")) {
Log.d(Tag, "Receive Stop Service Completed broadcast, start Alarm");
stopAlarmEvent(context);
}
} //开启定时任务,手动开启的时候调用
private void startAlarmEvent(Context context) {
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
//listen_receiver为AlarmReceiver.java注册的感兴趣的广播
alarmIntent.setAction("listen_receiver");
PendingIntent sender = PendingIntent.getBroadcast(context, 0,
alarmIntent, 0);
long firstime = SystemClock.elapsedRealtime();
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
//每6秒钟发送一次广播,API 23后,最短时间间隔为6秒
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime, 10 * 6000, sender);
}
//关闭定时任务,手动关闭的时候调用,防止自己也停止不了
private void stopAlarmEvent(Context context) {
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
//listen_receiver为AlarmReceiver.java注册的感兴趣的广播
alarmIntent.setAction("listen_receiver");
PendingIntent sender = PendingIntent.getBroadcast(context, 0,
alarmIntent, 0);
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
//取消发送广播
alarmManager.cancel(sender);
}

AlarmReceiver.java

@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("listen_receiver")) {
//如果监听的服务挂掉了,则启动服务
if (serviceIsRunnting(context, "xxxService")) {
Intent serviceIntent = new Intent(context, xxxService.class);
context.startService(serviceIntent);
}
}
}

2、如何判断某服务是否正在运行

//判断服务是否在运行
boolean serviceIsRunnting(Context context, String servcieName) {
boolean isRunning = false;
ActivityManager activityManager=null;
List<ActivityManager.RunningServiceInfo> serviceList=null; try{
activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
}catch (Exception e){
e.printStackTrace();
}
if(activityManager != null){
serviceList = activityManager.getRunningServices(Integer.MAX_VALUE);
} if (!(serviceList.size()>0)) {
return false;
} for (int i=0; i<serviceList.size(); i++) {
if (serviceList.get(i).service.getClassName().equals(servcieName)) {
isRunning = true;
break;
}
}
return isRunning;
}

3、如何暂时禁用Android的组件

private void setComponentState(boolean enable){
//xxx为app的某组件,我这里是receiver
final ComponentName alarmReceiver = new ComponentName(getApplication(), xxxx.class);
final PackageManager packageManager = getApplication().getPackageManager(); if(enable){
packageManager.setComponentEnabledSetting(alarmReceiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}else{
packageManager.setComponentEnabledSetting(alarmReceiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
}

根据我的使用经验,当在应用中禁用某组件后,系统会记录此状态,直接在as上点运行,替换原来的应用或者重启手机,系统仍然是禁用的(卸载后再安装系统会删除状态记录).

所以各位使用的时候需要注意到这一点,禁用后记得打开。

PS: 如果禁止的是主MainActivity,则桌面图标会消失

AlarmManager守护服务和隐藏桌面图标的更多相关文章

  1. C#隐藏桌面图标和任务栏

    最近因为项目需要需要实现桌面图标和任务状态栏的隐藏功能,实现的方式很多,比如修改注册表值,调用windows API函数等.经过一番的查阅,这个功能暂时实现了,或许不是很好的方法,但是我预期的效果达到 ...

  2. 修改apk显示或隐藏桌面图标

    反编译CM设置,打开AndroidManifest.xml,搜索“DEFAULT”,把他替换为"LAUNCHER",然后回编译,回编译之后签名在用RE放到system\app下该权 ...

  3. C# 隐藏显示桌面图标

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离

        在某国外大型汽车公司BI项目中,有一个子项目,需要通过大屏幕展示销售报表,程序需要自动启动和关闭.开发人员在开发过程中,发现在Win7的service中不能直接操作UI进程,调查过程中,发现如 ...

  5. Windows Server 2008 显示桌面图标

    相信有朋友们有安装使用过windows 2008 server服务器,刚安装好的时候,桌面上只有一个回收站的图标,它没有像windows 7或windows 8一样可以直接通过右击鼠标的菜单来设置,要 ...

  6. win7家庭版更改桌面图标

    电脑 Win7家庭普通版 方法/步骤   1 选择左下角开始. 2 在搜索栏中,输入“ico”,选择“显示或隐藏桌面上的通用图标”. 3 出现桌面图标设置,选择“更改图标”.

  7. Extjs2.0 desktop 动态创建桌面图标和开始菜单

    这几天一直纠结Extjs desktop怎么动态读取数据,用Ext.net已经实现但是不灵活.Ext.net做出来的桌面在窗口关闭后只是隐藏该窗口,并没有释放,对于我这种js菜鸟来说,改那一坨代码要人 ...

  8. 解决由腾讯qq浏览器引起win10系统桌面图标不停的闪烁问题

    win10系统桌面图标不停的闪烁,虽然不会引起太大问题,但是看着实在郁闷在网上搜索了很久,像停止问题报告服务,重置为默认应用都无解,了解到大概是软件兼容性问题于是打开服务管理器,一个一个关闭不是微软的 ...

  9. Windows XP解决显示桌面图标消失的问题

    1.依次单击“开始”,“运行”,在运行对话框中输入regsvr32 /n /i:u shell32.dll,按回车键 2.弹出“shell32.dll中的DllInstall成功”的窗口,表明已将数据 ...

随机推荐

  1. LeetCode题解之Swap Nodes in Pairs

    1.题目描述 2.问题分析 对两个节点进行交换操作 3.代码 ListNode* swapPairs(ListNode* head) { if( !head || head->next == N ...

  2. 使用 Visual Studio Team Services 和 IIS 创建持续集成管道

    若要将应用程序开发的生成.测试和部署阶段自动化,可以使用持续集成和部署 (CI/CD) 管道. 本教程介绍如何在 Azure 中使用 Visual Studio Team Services 和 Win ...

  3. Windows server 安装和配置zabbix agent

    1.下载Windows 平台的zabbix agent 先到官网下载zabbix_agentd监控客户端软件安装包(windows操作系统客户端),客户端版本尽量与服务器版本一致,下载地址:http: ...

  4. tikv性能参数调优

    tiKV 最底层使用的是 RocksDB(tidb3.0版本中将使用tian存储引擎) 做为持久化存储,所以 TiKV 的很多性能相关的参数都是与 RocksDB 相关的.TiKV 使用了两个 Roc ...

  5. MySQL基础之 支持的数据类型

    MySQL的数值类型 整数类型 字节 有符号 无符号 TINYINT 1 -128~+127 0~255 SAMLLINT 2 -32768~+32767 0~65535 MEDIUMINT 3 -8 ...

  6. 微信支付回调,XXE攻击漏洞防止方法

    最近微信支付回调发现的XXE攻击漏洞(什么是XXE攻击,度娘.bing去搜,一搜一大把),收到通知后即检查代码, 微信给的解决方法是如果你使用的是: XmlDocument: XmlDocument ...

  7. Docker 安装 - Docker 与前端(一)

    Docker 是一个开源的容器引擎,可以方便的对容器进行管理.作为一种新兴的虚拟化方式,跟传统的虚拟化方式相比具有众多优势.<Docker 遇见前端>系列文章,旨在记录如何通过 docke ...

  8. css实现常用的两栏三栏布局

    1.两栏 <div class="wrapper"> <div class="half left">left box <p> ...

  9. ES6标准入门之数值的拓展解说

    ES6提供了二进制和八进制数值的新写法,分别用前缀0b(或0B)和0o(或0O)表示. 0b111110111 === 503                    // true 0o767 === ...

  10. eclipse 格式化快捷键(Ctrl+shift+f)不起作用的解决办法

    eclipse格式化快界面Ctrl+Shift+f不起作用一般是键位冲突所导致的,一般是搜狗输入法的“繁体与简体”中文切换快界面冲突. 把它禁用掉就可以了. 下面是禁用步骤: 点击sougou输入法右 ...