在Android中完成启动后自动启动应用程序

我想在其设置中创建一个具有自动启动选项的应用程序。 我在我的应用程序中创建了一个从PreferenceActivity派生的Settings活动,并为自动启动选项提供CheckBoxPreference。 如果启用了自动启动选项,我的应用程序应在启动手机完成后启动。 如果禁用了自动启动选项,则它不应在启动完成时启动。

为实现这一目标,我实现了BroadcastReceiver的派生类,它接收BOOT_COMPLETED意图,在AndroidManifest.xml中声明接收器,并在AndroidManifest.xml中授予权限。

在应用程序中,还有一个派生类的Application和启动服务也来自应用程序派生类的onCreate方法。 如果我在AndroidManifest.xml中声明接收器,那么在启动我的应用程序的onCreate之后调用,然后调用BroadcastReceiver的onReceive方法。

现在的问题是,无论是启用还是禁用自动启动,我的应用程序每次启动都会启动。 禁用自动启动时是否可以不启动应用程序?

您可以使用共享首选项为isAutoStartEnabled存储布尔值,并在BroadcastReciver中检查此值,仅在它为true时触发intent。

在您的情况下,问题不在于您是否收到广播,而是接收广播的人。 祝你好运..

我希望它有帮助..

我认为从Android 3.1开始 ,接收BOOT_COMPLETED意图的BroadcastReceiver无法正常工作。 用户必须通过与之交互来唤醒应用程序。

因此,在启动设备后,所有第三方应用程序都会停止。

对于您目前的应用程序,您可以使用SharedPreferences自动启动您的应用程序。

更新:( 仅适用于3.1以下的Android版本,对于更高版本,它可以工作,但您必须在设备启动完成后与您的应用程序进行用户交互

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

将以下内容添加到清单文件中:

       

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 } } 

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

 final SharedPreferences sharedPreferences = getSharedPreferences("Application", MODE_PRIVATE); boolean isAutoStartEnabled = sharedPreferences.getBoolean("isAutoStartEnabled", false); if ( isAutoStartEnabled ) { startActivity(new Intent()); } 

我希望这可以帮助你

以下代码适用于我:

 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); } } } }