12

我想制作一个在其设置中具有自动启动选项的应用程序。我在我的应用程序中进行了设置活动,该活动派生自 PreferenceActivity 并为自动启动选项提供 CheckBoxPreference。如果启用了自动启动选项,我的应用程序应该在手机启动完成时启动。如果自动启动选项被禁用,那么它不应该在启动完成时启动。

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

在应用程序中还有一个应用程序的派生类,并且也从应用程序派生类的onCreate方法启动服务。如果我在 AndroidManifest.xml 中声明接收器,则在启动完成后调用我的应用程序的 onCreate,然后调用 BroadcastReceiver 的 onReceive 方法。

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

4

5 回答 5

10

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

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

我希望它有帮助..

于 2012-01-21T05:19:18.990 回答
6

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

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

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

更新:(适用于低于 3.1 的更高版本的 Android 版本,但您必须在设备上完成启动后与您的应用程序进行用户交互

您需要使用 a BroadcastReceiverwith android.intent.action.BOOT_COMPLETEDintent。

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

<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 
    }
}
于 2012-01-21T05:25:52.870 回答
6

您必须在清单中添加使用权限android.permission.RECEIVE_BOOT_COMPLETED

于 2012-10-26T04:59:21.830 回答
1
final SharedPreferences sharedPreferences = getSharedPreferences("Application", MODE_PRIVATE);
        boolean isAutoStartEnabled = sharedPreferences.getBoolean("isAutoStartEnabled", false);

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

我希望这可以帮助你

于 2012-01-21T05:30:34.070 回答
1

以下代码适用于我:

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

            }
        }
    }

}
于 2013-12-10T19:51:38.280 回答