1. 程式人生 > >關於Android自啟動管理的相關知識點

關於Android自啟動管理的相關知識點

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