AlarmManager守护服务和隐藏桌面图标
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守护服务和隐藏桌面图标的更多相关文章
- C#隐藏桌面图标和任务栏
最近因为项目需要需要实现桌面图标和任务状态栏的隐藏功能,实现的方式很多,比如修改注册表值,调用windows API函数等.经过一番的查阅,这个功能暂时实现了,或许不是很好的方法,但是我预期的效果达到 ...
- 修改apk显示或隐藏桌面图标
反编译CM设置,打开AndroidManifest.xml,搜索“DEFAULT”,把他替换为"LAUNCHER",然后回编译,回编译之后签名在用RE放到system\app下该权 ...
- C# 隐藏显示桌面图标
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 解决vista和win7在windows服务中交互桌面权限问题:穿透Session 0 隔离
在某国外大型汽车公司BI项目中,有一个子项目,需要通过大屏幕展示销售报表,程序需要自动启动和关闭.开发人员在开发过程中,发现在Win7的service中不能直接操作UI进程,调查过程中,发现如 ...
- Windows Server 2008 显示桌面图标
相信有朋友们有安装使用过windows 2008 server服务器,刚安装好的时候,桌面上只有一个回收站的图标,它没有像windows 7或windows 8一样可以直接通过右击鼠标的菜单来设置,要 ...
- win7家庭版更改桌面图标
电脑 Win7家庭普通版 方法/步骤 1 选择左下角开始. 2 在搜索栏中,输入“ico”,选择“显示或隐藏桌面上的通用图标”. 3 出现桌面图标设置,选择“更改图标”.
- Extjs2.0 desktop 动态创建桌面图标和开始菜单
这几天一直纠结Extjs desktop怎么动态读取数据,用Ext.net已经实现但是不灵活.Ext.net做出来的桌面在窗口关闭后只是隐藏该窗口,并没有释放,对于我这种js菜鸟来说,改那一坨代码要人 ...
- 解决由腾讯qq浏览器引起win10系统桌面图标不停的闪烁问题
win10系统桌面图标不停的闪烁,虽然不会引起太大问题,但是看着实在郁闷在网上搜索了很久,像停止问题报告服务,重置为默认应用都无解,了解到大概是软件兼容性问题于是打开服务管理器,一个一个关闭不是微软的 ...
- Windows XP解决显示桌面图标消失的问题
1.依次单击“开始”,“运行”,在运行对话框中输入regsvr32 /n /i:u shell32.dll,按回车键 2.弹出“shell32.dll中的DllInstall成功”的窗口,表明已将数据 ...
随机推荐
- MySQL分析函数实现
| MySQL分析函数实现还好MySQL8.0已经实现了与Oracle相同的分析函数. 1. 实现rownumSET @rn:=0;SELECT @rn:=@rn+1 AS rownum ,e.* F ...
- Django之基于iframe的ajax伪造
IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME).iframe元素会创建包含另外一个文档的内联框架 ajax的理念是不进行浏览器页面刷新的信息获取更新,也就是局部刷新. 那 ...
- [IDEA_2] IDEA 问题合集
1. IDEA 通过 Maven 导入的依赖包下面存在红色波浪线 问题描述: 创建的 Maven Project 在添加相关依赖后自动下载,自动添加的依赖包的下面存在红色波浪线,在使用过程中存在问题, ...
- 【转】Linux下从TCP状态机,三次握手判断DDOS攻击
从TCP状态机判断DDOS攻击 一.TCP协议 TCP 协议是传送层的核心协议,提供了可靠面向连接的协议,分为三次握手和四次断开,在这个过程中TCP有个状态机,记录不同阶段的状态. 二. TCP握手和 ...
- C++设计模式 ==> 装饰(者)模式
简介 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.装饰模式使用对象嵌套的思想,实现对一个对象动态地进行选择性的属 ...
- 牢记 31 种 CSS 选择器用法
原文 The 30 CSS Selectors you Must Memorize 由 Jeffrey Way 发表于 2011 年 6 月,介绍了 30 种最常用的 CSS 选择器用法,多加了一种, ...
- November 14th, 2017 Week 46th Tuesday
Eternity is said not to be an extension of time but an absence of time. 永恒不是时间的无限延伸,而是没有时间. What is ...
- sql点滴—mysql中查询表的信息
mysql中查询表的信息 查询mysql表字段信息的sql语句 SHOW DATABASES //列出 MySQL Server 数据库. SHOW TABLES [FROM db_name] //列 ...
- 粗略的整改一下blog
一.先找个简约的模板:看个人喜好咯 二.页面定制CSS: 1.首先,查看主页源码,了解一下各个标签的id,引用的class等 2.通过操作相应的id,class,和标签,进行个性化.这里需要具备看懂和 ...
- 【python27】猜随机数的小游戏
游戏规则: 猜一个随机数,如果猜对了就给出相应的猜成功提示语(自定义文字),如果猜大或者是猜小了,给出对应的提示,但总的猜次数为三次,每猜错一次重新猜时,给用户提示所剩余的猜次数 实现如下: # -* ...