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

Khu*_*hah 12 android autostart broadcastreceiver android-intent

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

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

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

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

R.d*_*vaw 10

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

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

我希望它有帮助..


use*_*305 6

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

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

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

更新:(仅适用于Android版本低于3.1高版本的它的工作原理,但你的引导完成设备之后有用户交互与应用程序)

您需要使用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>
Run Code Online (Sandbox Code Playgroud)

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 
    }
}
Run Code Online (Sandbox Code Playgroud)


Kam*_*aar 6

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