1. 程式人生 > >Android實現程式開機自啟動

Android實現程式開機自啟動

可以通過Android系統中的廣播機制實現開機自啟動。廣播(Broadcast)是Android系統的四大元件之一,通過該機制可以實現不同應用程式之間的通訊。

1 開機自啟動基本原理

Android系統開機後,系統會發送一個“已開機”的廣播。需要開機自啟動的程式接收這個廣播,然後啟動自己的活動即可。如圖1所示。

 

1 程式自啟動原理

自定義廣播接收器

在需要自啟動的程式中,需要建立廣播接收器來接收廣播。類BroadcastReceiver表示廣播接收器,所以在程式中建立一個該類的派生類即可。

2.1 廣播接收器類的建立

選中MainActivity類所在的資料夾,之後在右鍵選單中選擇“New->Java Class

”,彈出“Create New Class”對話方塊。接下來在該對話方塊中,將建立的廣播接收器類的名稱設定為“BootBroadcastReceiver”,並將該類的父類(Superclass)設定為“android.content.BroadcastReceiver”,最後點選“OK”按鍵,如圖2所示。

 

2 建立廣播接收器類

2.2 廣播接收器類的實現

對於自定義的BroadcastReceiver類的派生類,必須重寫其父類的onReceive()函式。當廣播接收器收到指定的廣播後,就會呼叫該函式。

對於需要開機自啟動的程式,其廣播接收器收到開機的廣播後,就要啟動自己的主活動。所以,對於在2.1

廣播接收器類的建立”中建立的BootBroadcastReceiver類來說,其onReceive()函式的主要流程為首先判斷收到的廣播是否是系統已啟動的廣播,如果是,則啟動自己的主活動。

@Override
public void onReceive(Context context, Intent intent){
    if(intent.getAction().equals(ACTION)){
        Intent myIntent = new Intent(context, MainActivity.class);
        myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(myIntent);
    }
}

2.2.1 onReceive()方法

該方法有兩個引數,其中context表示廣播接收器所執行的上下文;intent表示廣播接收器收到的Intent

2.2.2 收到廣播型別的判斷

onReceive()方法中,首先通過收到的intent判斷廣播型別。getAction()方法的作用是獲取接收到的Intent的動作。ACTION是定義的字串。

static final String ACTION = "android.intent.action.BOOT_COMPLETED";

其中,android.intent.action.BOOT_COMPLETED是已開機廣播對應的字串。

2.2.3 啟動主活動

當收到的廣播是已開機廣播,則通過Intent來啟動主活動。

其中,MainActivity是主活動對應的類名;addFlags()Intent類的方法,該方法的作用是設定Intent的屬性,FALG_ACTIVITY_NEW_TASK表示建立一個新任務來啟動該主活動。最後,通過startActivity()方法啟動主活動。

3 在程式中配置廣播接收器

可以通過兩種方式配置程式的廣播接收器,一種是通過安卓API函式實現的動態配置;另一種是通過AndroidManifest.xml實現的靜態配置。動態配置必須要在程式啟動之後才能接收廣播,靜態配置可以讓程式在未啟動的情況下就能接收到廣播。對於程式開機自啟動的功能,必須要用到靜態配置。

3.1 配置接收器

AndroidManifest.xml檔案的<application>標籤中,加入如下程式碼

<receiver android:name=".BootBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
    </intent-filter>
</receiver>

其中,標籤<receiver>表示的是廣播接收器,“BootBroadcastReceiver”是在“自定義廣播接收器”中自定義的廣播接收器類的名稱<intent-filter>指定了該廣播接收器接收的廣播型別,“android.intent.action.BOOT_COMPLETED”即為系統啟動完成的廣播。當安卓系統啟動完成後,會向所有程式傳送系統氣功完成的廣播,本系統通過以上靜態配置,即可接收該廣播,並呼叫自定義類BootBroadcastReceiveronReceive()方法啟動自己的主活動,實現開機自啟動功能。

3.2 程式許可權的提升

必須提升程式的許可權才能收到系統啟動完成的廣播。許可權的提升也是通過在AndroidManifest.xml中進行配置實現的。在<application>標籤之外新增如下程式碼

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

其中,<uses-permission>標籤標識應用程式許可權,“android.permission.RECEIVE_BOOT_COMPLETED”是系統啟動完成廣播對應的字串。以上程式碼的作用是為程式的使用者許可權新增接收系統啟動完成廣播的許可權。