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成功”的窗口,表明已将数据 ...
随机推荐
- SSH批量分发管理
ssh服务认证类型主要有两个: 基于口令的安全验证: 基于口令的安全验证的方式就是大家一直在用的,只要知道服务器的ssh连接账户.口令.IP及开发的端口,默认22,就可以通过ssh客户端登陆到这台远程 ...
- python基础学习3----列表
一.字符格式化输出 占位符 %s s = string 字符串 %d d = digit 整数 %f f = float 浮点数 name = input(&q ...
- .NET Core 获取配置文件appsettings.json 方法
using Abp.Extensions; using Microsoft.Extensions.Configuration; using System; using System.Collectio ...
- Qt: QSqlRecord字段值为null时注意事项
QSqlRecord在对应字段值为null时,QSqlRecord::value返回的QVariant是有效但为null(相当于使用QVariant(Type type)构造的),所以此时做对应类型的 ...
- Spring hibernate 事务的流程
1 在业务方法开始之前 ①获取session ②把session和当前线程绑定,这样就可以在Dao中使用SessionFactory的getCurrentSession()方法来获取session了 ...
- 使用ramdisk内存分区给常用软件加速
::参考内存盘软件https://download.csdn.net/download/zly6tz/9717137cls @echo off ::内存虚拟盘符-内存盘大小自己查看源目录大小 ::下面 ...
- 【PyCharm疑问】在pycharm中带有中文时,有时会导致程序判断错误,是何原因?
1.会导致程序打印false错误的代码如下: # -*- coding:utf-8 -*- import os import sys from uiautomator import device as ...
- git版本管理工具-git的概述
什么是git Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目的一种工具 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不 ...
- jenkins报错;自定义工作目录;
[1]no such file 报错: 如果jdk配置路径错误,有可能会报这样的错误: 其实只要在/etc/profile中配置好JAVA_HOME就足够了: 对应的系统配置框,留空不新加即可: [2 ...
- WorldWind源码剖析系列:四叉树瓦片类QuadTile
四叉树瓦片类QuadTile提供了对影像和地形数据的四叉树访问模型.该类的类图如下. 四叉树瓦片类QuadTile提供的主要字段.属性和方法简要描述如下: public QuadTileSet Qua ...