关于Android自启动管理的相关知识点

来源:互联网 发布:网络交流软件 编辑:程序博客网 时间:2024/04/29 21:50

1.自启动的实现

1.添加权限。<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

2.在xml文件里,静态注册广播接收器。

3.实现具体自启动广播接收器类代码。

2.接收不到BOOT_COMPLETED广播的情况

1.应用处于stoped状态:安装完后没有启动(安装在/system/app/除外),或者被强制停止(看到很多帖子都说是强制关闭,有误解:认为直接kill进程会进入停止状态,其实是设置应用管理里面的“强制停止”)。是接收不到系统广播的(有的说是从3.1开始)。

2.应用安装在SD卡上,系统启动,发送BOOT_COMPLETED广播后,才会加载SD卡

3.其它广播来代替BOOT_COMPLETED

1.SD卡挂载广播:

   <intent-filter >        <action android:name="android.intent.action.MEDIA_MOUNTED" />        <action android:name="android.intent.action.MEDIA_UNMOUNTED" />        <data android:scheme="file" >        </data>    </intent-filter>

2.网络状态

android.net.com.CONNECTIVITY_CHANGE

4.自启动管理

1.pm disable-user/enable  yourPackName/appName

但是呢这个有个问题,程序被完全禁止了。


2.通过setComponentEnabledSetting 去进行控制。

360等管理软件自启管理动应该是通过setComponentEnabledSetting 去实现的,但不明白如何拥有权限去控制的?望有知道的人可以告知下。为什么说360等控制自启动软件是通过setComponentEnabledSetting 实现的呢?我是这么测试的:

先安装个自启动的测试app(里面写了用setComponentEnabledSetting 把自己的广播接收Receiver激活的功能代码), 测试自启动成功后。

再用360把自启动给关掉。手机重启测试app已经无法自启动。

这时手动打开测试APP,运行激活广播接收器的代码(setComponentEnabledSetting )。

重启手机,自启动成功。

激活代码:

/* 激活receiver    * @param    * context 上下文    * name 要激活的receiver的名字--要带包名例:com.test.TimeReceiver*/ public void decide(Context context,String name) {        pm=context.getPackageManager();mComponentName=new ComponentName(context,name);if(pm.getComponentEnabledSetting(mComponentName)!=1){pm.setComponentEnabledSetting(mComponentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,PackageManager.DONT_KILL_APP);         } }


测试方法如果有问题忘指正,所以最后的结果是虽然不知道如何去控制别人的自启动,但还是可以保证自己的自启动接收器在激活状态。


5.不能静态注册的广播

1.android.intent.action.SCREEN_ON

2.android.intent.action.SCREEN_OFF

3.android.intent.action.BATTERY_CHANGED

4.android.intent.action.CONFIGURATION_CHANGED

5.android.intent.action.TIME_TICK

1 0
原创粉丝点击