1.今天我們主要來探讨android怎麼讓一個service開機自動啟動功能的實作。Android手機在啟動的過程中會觸發一個Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED(記得隻會觸發一次呀),在這裡我們可以通過建構一個廣播接收者來接收這個這個action.下面我就來簡單寫以下實作的步驟:
2. 第一步:首先建立一個廣播接收者,重構其抽象方法 onReceive(Context context, Intent intent),在其中啟動你想要啟動的Service或app。
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class BootBroadcastReceiver extends BroadcastReceiver {
//重寫onReceive方法
@Override
public void onReceive(Context context, Intent intent) {
//後邊的XXX.class就是要啟動的服務
Intent service = new Intent(context,XXXclass);
context.startService(service);
Log.v("TAG", "開機自動服務自動啟動.....");
//啟動應用,參數為需要自動啟動的應用的包名
Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
context.startActivity(intent );
}
}
第二步:配置xml檔案,在receiver接收這種添加intent-filter配置
<receiver android:name="BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
第三步:添權重限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
啟動APP:
因為做一個hotkey的項目,其中有幾個快捷鍵需要啟動系統自帶的browser和email。因為剛剛開始學習android,在網上找到啟動browser和email的方法都是利用ACTION_VIEW和SENDTO這樣的intent去啟動browser和email.問題來了:
1.如果是這樣的話,啟動browser需要自己預設一個網址,然後調用浏覽器打開改網址。
2.啟動email,也是需要自己設定一個賬戶位址,才能調用email去發送。
但是我隻是需要打開程式,不想設定死這些data。是以想用應用程式本身的intentfilter中的action,不友善了。想到我想要的功能就隻是簡單代替了點選圖示來啟動程式,是以從laucher中入手應該可以。去調用onClick中的方法就行了。
最後實作如下:
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage("packagename");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//隻要是調用系統的app,就要加上這個flag,否則會抛出異常。
startActivity(intent);
這樣不用指定 action就可以實作調用任何一個自帶app了。
=====================================