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成功”的窗口,表明已将数据 ...
随机推荐
- Linux Ubuntu16.04LTS安装TensorFlow(CPU-only,python3.7)——使用Anaconda安装
1.安装Anaconda(在此不再赘述) 2.用Conda安装TensorFlow 1)建立TensorFlow运行环境并激活 conda create -n tensorflow pip pytho ...
- jdk1.8配置环境变量
1. 准备好jdk安装文件,选择地址,假设使用默认地址 2. 安装jdk,此时跳出安装 jre 的地址 3. 等待安装 4.找到安装路径,选择jdk 5. 复制文件夹下的bin 6. 点击我的电脑右键 ...
- MySQL案例-mysqld got signal 11
背景:MySQL-5.7.12, debian 8核16G虚拟机, 业务方反馈在某一个时间点, 出现了大量的数据库报错, 之后恢复正常; 场景:开发查看日志后, 发现在某个时间点, 应用断开了所有与数 ...
- 检索 COM 类工厂中 CLSID 为 {00021A20-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80080005
创建Excel对象失败: Excel.Application xApp = new Excel.Application(); 错误提示:{"检索 COM 类工厂中 CLSID 为 {0002 ...
- 乘风破浪:LeetCode真题_034_Find First and Last Position of Element in Sorted Array
乘风破浪:LeetCode真题_034_Find First and Last Position of Element in Sorted Array 一.前言 这次我们还是要改造二分搜索,但是想法却 ...
- Asp.net core 2.0.1 Razor 的使用学习笔记(二)
ASP.net core 2.0.1 中 asp.net identity 2.0.1 的基本使用(一)—启用用户管理 一.修改和启用默认的用户账户管理和角色管理 在Data目录中添加Applicat ...
- IDEA中的替换功能(替换代码中的变量名很好用哦)
刚刚上班不久,这两天正在研究公司项目里面的代码,今天用阿里的插件扫描了一下代码,发现代码中有很多变量的命名,没有遵循驼峰式的命名规则.一开始我一个一个的修改这些变量名,后来无意中用了一下Ctrl+F( ...
- cpu的核心数及线程关系
CPU个数.核心数.逻辑CPU个数:一个物理CPU可以有多个核心,一个CPU核就是一个物理线程,由英特尔开发超线程技术可以把一个物理线程模拟出两个线程来使用,使得单个核心用起来像两个核一样,以充分发挥 ...
- Node.js实战(九)之事件循环
Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高. Node.js 几乎每一个 API 都是支持回调函数的. Node ...
- MP实战系列(十六)之性能分析插件
性能分析拦截器,用于输出每条 SQL 语句及其执行时间. 虽然使用阿里的Druid连接池可以完成这个目的,但是,我们一般认为,目前的组件能够达到这个目的,尽量使用目前的组件,因为修改配置和引入第三方库 ...