靜態註冊實現開機啟動

2021-08-07 11:45:06 字數 3328 閱讀 3288

動態註冊的廣播接收器可以自由地控制註冊和登出,靈活性好,但有乙個缺點,即必須要在程式啟動後才能接收到廣播,因為註冊的邏輯是寫在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鍵下可以看到有一系列鍵值,它們都是開機自動執行的軟體的路徑。那麼我們要做的就...