背景知識:當Android啓動時,會發出一個系統廣播,內容爲ACTION_BOOT_COMPLETED,它的字符串常量表示爲 android.intent.action.BOOT_COMPLETED。只要在程序中「捕捉」到這個消息,再啓動之便可。記住,Android框架說:Don't call me, I'll call you back。咱們要作的是作好接收這個消息的準備,而實現的手段就是實現一個BroadcastReceiver。
代碼解析:
一、界面Activity:SayHello.java
- package com.ghstudio.BootStartDemo;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class SayHello extends Activity {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TextView tv = new TextView(this);
- tv.setText("Hello. I started!");
- setContentView(tv);
- }
- }
複製代碼
這段代碼很簡單,當Activity啓動時,建立一個TextView,用它顯示"Hello. I started!"字樣。
二、接收廣播消息:BootBroadcastReceiver.java
- package com.ghstudio.BootStartDemo;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- public class BootBroadcastReceiver extends BroadcastReceiver {
- static final String ACTION = "android.intent.action.BOOT_COMPLETED";
- @Override
- public void onReceive(Context context, Intent intent) {
-
- if (intent.getAction().equals(ACTION)){
- Intent sayHelloIntent=new Intent(context,SayHello.class);
- sayHelloIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(sayHelloIntent);
- }
- }
- }
複製代碼
該類派生自BroadcastReceiver,覆載方法onReceive中,檢測接收到的Intent是否符合BOOT_COMPLETED,若是符合,則啓動SayHello那個Activity。
三、配置文件:AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.ghstudio.BootStartDemo"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".SayHello"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- [b]<receiver android:name=".BootBroadcastReceiver">
- <intent-filter>
- <action android:name="android.intent.action.BOOT_COMPLETED" />
- </intent-filter>
- </receiver> [/b] </application>
- <uses-sdk android:minSdkVersion="3" />
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
- </manifest>
複製代碼
注意其中粗體字那一部分,該節點向系統註冊了一個receiver,子節點intent-filter表示接收 android.intent.action.BOOT_COMPLETED消息。不要忘記配置 android.permission.RECEIVE_BOOT_COMPLETED權限。 延伸思考:在多數狀況下,要自動運行的不是有界面的程序,而是在後臺運行的service。此時,就要用startService來啓動相應的 service了。