動態註冊的廣播接收器可以自由地控制註冊和登出,靈活性好,但有乙個缺點,即必須要在程式啟動後才能接收到廣播,因為註冊的邏輯是寫在oncreate()方法中的.
這裡我們採用靜態註冊的方式讓程式接收到一條開機廣播,收到這條廣播的時候就可以在onreceive()方法裡執行相應的邏輯,從而實現開機啟動的工功能.可以使用android studio 提供的快捷方式建立乙個廣播接收器.
,右擊com.example.broadcasttest包 ->news ->other ->broadcast receiver
這裡我們將廣播接收器命名為bootcompletereceiver , exported屬性表示是否允許這個廣播接收器接收本程式以外的廣播,enabled屬性表示是否啟用這個廣播接收器,都勾選,finish.
然後修改bootcompletereceiver的**
package com.example.luokexi.broadcasttestdemo2;
import android.content.broadcastreceiver;
import android.content.context;
import android.content.intent;
import android.net.connectivitymanager;
import android.widget.toast;
public
class
bootcompletereceiver
extends
broadcastreceiver
}
這裡這是在onreceive()方法中使用toast彈出一段提示資訊.
另外,靜態的廣播接收器一定要在androidmanifest.xml檔案中註冊才能使用,不過我們使用的是android studio 的快捷方式建立的廣播接收器,因此註冊這一步已經自動完成.開啟androidmanifest.xml檢視下.
<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
package="com.example.luokexi.broadcasttestdemo2">
android:name="android.permission.access_network_state" />
android:allowbackup="true"
android:icon="@mipmap/ic_launcher"
android:roundicon="@mipmap/ic_launcher_round"
android:supportsrtl="true"
android:name=".mainactivity">
android:name="android.intent.action.main" />
android:name="android.intent.category.launcher" />
intent-filter>
activity>
android:name=".bootcompletereceiver"
android:enabled="true"
android:exported="true">
receiver>
manifest>
不過目前的 bootcompletereceiver還是不能接受到開機廣播的,我們還需要對androidmanifest.xml檔案進行修改:
<?xml version="1.0" encoding="utf-8"?>
xmlns:android=""
package="com.example.luokexi.broadcasttestdemo2">
android:name="android.permission.access_network_state" />
android:name="android.permission.receive_boot_completed"/>
android:allowbackup="true"
android:icon="@mipmap/ic_launcher"
android:roundicon="@mipmap/ic_launcher_round"
android:supportsrtl="true"
android:name=".mainactivity">
android:name="android.intent.action.main" />
android:name="android.intent.category.launcher" />
intent-filter>
activity>
android:name=".bootcompletereceiver"
android:enabled="true"
android:exported="true">
android:name="android.intent.action.boot_completed"/>
intent-filter>
receiver>
manifest>
由於android系統啟動完成後會發出一條值為android.intent.action.boot_completed的廣播,因此我們在 intent-filter 標籤裡新增了響應的 action .另外,監聽系統開機廣播也是需要宣告許可權的,可以看到我們使用 uses - permission 標籤 又加入了一條 android.permission.receive_boot_completed許可權.
現在我們試試看. 執行程式後,將模擬器關閉,重新啟動,在啟動完成後就會收到開機廣播.
我們在廣播接收器的onreceive()方法中都只是簡單地使用toast提示了一段文字資訊,當你真正在專案中使用它的時候,就可以在裡面編寫自己的邏輯.需要注意的是不要在onreceive()方法中新增過多的邏輯或者進行任何耗時的操作,因為在廣播接收器中是不允許開啟執行緒的,當onreceive()方法執行較長時間而沒有結束時,程式就會報錯.因此廣播接收器更多的是扮演一種開啟程式其他元件的角色,比如建立一條狀態列通知,或者啟動乙個服務等.
靜態註冊實現開機啟動
使用快捷方式建立乙個廣播接收器 包名 右鍵new other broadcast receiver 將廣播接收器命名如圖所示,exported屬性表示是否允許這個廣播接收器接收本程式以外的 廣播,enabled屬性表示是否啟用這個廣播接收器 修改類中 在 onreceive方法中使用toast彈出一...
Andorid系統靜態註冊實現開機啟動
一 靜態註冊實現開機啟動 1.在之前的 中,我們編寫的是動態註冊,用到了內部類等。動態註冊只能在程式啟動之後才能生效。接下來我們將要使用靜態註冊的方式進行註冊。可以舉例開機啟動項 package com.example.broadcasttest2 import android.content.br...
寫登錄檔實現開機啟動
我在csdn 上經常看到有人問這樣的問題,其實要實現開機時就自動執行自己的程式並不難。在登錄檔的hkey local machine software microsoft windows currentversion run鍵下可以看到有一系列鍵值,它們都是開機自動執行的軟體的路徑。那麼我們要做的就...