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

时间:2012-01-21 05:14:15

标签: android-intent broadcastreceiver autostart android

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

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

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

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

5 个答案:

答案 0 :(得分:10)

您可以使用共享首选项来存储isAutoStartEnabled的布尔值,并在BroadcastReciver中检查此值,仅当它是真的时才触发它。

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

我希望它有所帮助..

答案 1 :(得分:6)

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

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

目前您的应用程序可以使用SharedPreferences自动启动您的应用程序..

更新仅适用于Android版本低于3.1的更高版本,但是您必须在设备启动完成后与用户进行交互

您需要使用BroadcastReceiver android.intent.action.BOOT_COMPLETED意图。

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

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

实施BoradcastReciever的App_Receiver类。实施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 
    }
}

答案 2 :(得分:6)

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

答案 3 :(得分:1)

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

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

我希望这有助于你

答案 4 :(得分: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);

            }
        }
    }

}