天天看點

【轉】android如何實作開機自動啟動Service或app

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了。

=====================================

繼續閱讀