2013年10月23日 星期三

Android 開機自動執行 AP

這篇只是純筆記, 環境使用 google 打包的 eclipse + android 工具包 + android NDK, 這個比較方便. 以下以新增一個 android application project 做界紹.

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 沒有這行就一定不給你動..

沒有留言: