簡體   English   中英

在Android中啟動后自動啟動應用程序

[英]Auto start application after boot completed in Android

我想在其設置中創建一個具有自動啟動選項的應用程序。 我在我的應用程序中創建了一個從PreferenceActivity派生的Settings活動,並為自動啟動選項提供CheckBoxPreference。 如果啟用了自動啟動選項,我的應用程序應在啟動手機時啟動。 如果禁用了自動啟動選項,則它不應在啟動完成時啟動。

為了實現這一點,我實現了BroadcastReceiver的派生類,它接收BOOT_COMPLETED意圖,在AndroidManifest.xml中聲明接收器,並在AndroidManifest.xml中授予權限。

在應用程序中,還有一個派生類的Application和啟動服務也來自應用程序派生類的onCreate方法。 如果我在AndroidManifest.xml中聲明接收器,那么在啟動我的應用程序的onCreate之后調用,然后調用BroadcastReceiver的onReceive方法。

現在的問題是,無論是啟用還是禁用自動啟動,我的應用程序每次啟動都會啟動。 禁用自動啟動時是否可以不啟動應用程序?

您可以使用共享首選項為isAutoStartEnabled存儲布爾值,並在BroadcastReciver中檢查此值,僅在它為true時觸發intent。

在您的情況下,問題不在於您是否收到廣播,而是接收廣播的人。 祝你好運..

我希望它有幫助..

您必須在Manifest中添加uses-permission android.permission.RECEIVE_BOOT_COMPLETED

我認為從Android 3.1開始你的BroadcastReceiver接收BOOT_COMPLETED意圖它不會工作。 用戶必須通過與之交互來喚醒應用程序。

因此,在啟動設備后,所有第三方應用程序都在停止。

對於您目前的應用程序,您可以使用SharedPreferences自動啟動您的應用程序。

更新:( 僅適用於3.1以下的Android版本,對於更高版本,它可以工作,但您必須在設備啟動完成后與您的應用程序進行用戶交互

您需要使用具有android.intent.action.BOOT_COMPLETED意圖的BroadcastReceiver

將以下內容添加到清單文件中:

<receiver android:name="App_Receiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

App_Receiver類實現BoradcastReciever 實現onReceive()方法並從您的應用程序啟動您喜歡的活動。

public void onReceive(Context context, Intent intent) {
    // make sure you receive "BOOT_COMPLETED"
// Here isAutoStartEnabled check sharedPreferences for Auto Start flag
if ( isAutoStartEnabled ) {

    if ((intent.getAction() != null) && (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")))
    {
        // Start the service or activity 
    }
}

以下代碼適用於我:

public class BootCompleteReceiver extends BroadcastReceiver {
    public static final String PREFS_NAME = "MyPrefsFile";  

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
            Log.d("boot completed", "boot completed caught");
            Boolean autoRestart = false;
            SharedPreferences sp = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
            autoRestart = sp.getBoolean("autoRestart", false);

            if (autoRestart){

                Log.d("boot completed", "auto restart true");

                Intent i = new Intent(context, WelcomeScreen.class);
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(i);

            }
        }
    }

}
final SharedPreferences sharedPreferences = getSharedPreferences("Application", MODE_PRIVATE);
        boolean isAutoStartEnabled = sharedPreferences.getBoolean("isAutoStartEnabled", false);

        if ( isAutoStartEnabled ) {
            startActivity(new Intent());
        } 

我希望這可以幫助你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM