1. 新增一個 android application project (也就是 hello world 那個), 假設類別叫 Action. 主程式都不需要動. 通常長的如以下寫的. 而這裡面重要的只有幾個關鍵字:
--------------
package boot.test;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class Action extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_action); }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.action, menu);
return true; }
}
--------------
2. src 下的 packet 裡新增一個 class (java class), 假設叫 MsgRcv. 這個 MsgRcv 是啟動 Action 用的. "public class MsgRcv" 後面請追加 "extends BroadcastReceiver" 讓它繼承自 android.content.BroadcastReceiver. 很重要. OnReceive 是加上去的, 名字最好一模一樣.
--------------
import boot.test.Action;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class MsgRcv extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
Intent mBootIntent = new Intent(context, Action.class);
mBootIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mBootIntent);
}
}
OnReceive 其實可以接收其它雜七雜八的訊息, 只是 mainfest.xml 裡有特別指定接收 android.intent.action.BOOT_COMPLETED 這一個, 收到後再去啟動指定的 class.
3. Mainfest.xml (AndroidMainfest.xml) 裡 </application> 前加上這個:
--------------
<receiver android:name="MsgRcv">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
--------------
不是 ".MsgRcv", 前面沒有小數點.
2013/10/29 追加. AndroidMainfest.xml 在
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
--------------
android 2.2, 2.3 加不加這行無所謂, 但 4.0 沒有這行就一定不給你動..