一、靜態註冊實現開機啟動 1.在之前的連載中,我們編寫的是動態註冊,用到了內部類等。動態註冊只能在程式啟動之後才能生效。接下來我們將要使用靜態註冊的方式進行註冊。(可以舉例開機啟動項) package com.example.broadcasttest2; import android.cont ...
一、靜態註冊實現開機啟動
1.在之前的連載中,我們編寫的是動態註冊,用到了內部類等。動態註冊只能在程式啟動之後才能生效。接下來我們將要使用靜態註冊的方式進行註冊。(可以舉例開機啟動項)
package com.example.broadcasttest2; import android.content.BroadcastReceiver; import android.widget.Toast; public class BootCompleteReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context,Intent intent) { Toast.makeText(context,"Boot Complete", Toast.LENGTH_LONG).show(); } }
2. 我們需要AndroidManifest.xml中將這個廣播接收器的類名註冊進去。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest2" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".BootCompleteReceiver"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application> </manifest>
終於在,application>標簽內出現了一個新的標簽<receiver>,所有靜態註冊廣播接收器是在這裡進行註冊的。它的用法其實和<activity>標簽非常相似,首先通過android:name來指定具體註冊哪一個廣播接收器,然後在<intent-filter>標簽中裡加入想要接受的廣播就行了,由於Andorid系統啟動完成後會發出一條值為android.intent.action.BOOT_COMPLETED的廣播,因此我們我在這裡添加了相應的action。
另外,監聽系統開機廣播也是需要聲明許可權的,可以看到,我們使用<uses-permission>,標簽又加入一條android.permission.RECEIVE_BOOT_COMPLETED許可權。
現在我們重新運行程式後,我們的程式已經可以接受開機廣播了,
添加好設置之後,我們重新啟動一個這個app,然後看一下設置中關於APP的配置信息;可以看到,這裡有預設啟動項的設置。
註意:不要在onReceive()方法中添加過多的邏輯或者進行任何的耗時操作,因為在廣播接收器中是不允許開啟線程的,當onReceive()方法運行了較長時間而沒有結束,程式就會報錯。因此廣播接收器更多的是扮演一種打開程式其他組件的角色,比如創建一條狀態欄通知,或者啟動一個服務等。
二、源碼:
BroadcastTest2
https://github.com/ruigege66/Android/tree/master/BroadcastTest2
2.CSDN:https://blog.csdn.net/weixin_44630050
3.博客園:https://www.cnblogs.com/ruigege0000/
4.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料。