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

1.自启动的实现

1.添加权限。

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

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

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

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

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

3.其它广播来代替BOOT_COMPLETED

1.SD卡挂载广播:

   
        
        
        
        
    

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

你可能感兴趣的:(Android开发)