[英]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.