Автозапуск приложения после завершения загрузки в Android - PullRequest
12 голосов
/ 21 января 2012

Я хочу сделать приложение, в настройках которого есть опция автозапуска.Я настроил действие в своем приложении, которое является производным от PreferenceActivity и предоставляю опцию CheckBoxPreference для автоматического запуска.Если опция автозапуска включена, мое приложение должно запуститься после завершения загрузки телефона.И если опция автозапуска отключена, то она не должна запускаться при завершении загрузки.

Для этого я реализовал производный класс BroadcastReceiver, который получает намерение BOOT_COMPLETED, объявляет получатель в AndroidManifest.xml, а также дает разрешение в AndroidManifest.xml.

В приложении также есть производный класс Application и служба запуска также из метода onCreate производного класса приложения. Если я объявляю получатель в AndroidManifest.xml, то после завершения загрузки вызывается onCreate моего приложения и после этого вызывается метод onReceiveВызов BroadcastReceiver.

Теперь проблема в том, что мое приложение запускается при загрузке, завершенной каждый раз, когда включен или отключен автоматический запуск.Можно ли не запускать приложение, когда автозапуск отключен?

Ответы [ 5 ]

10 голосов
/ 21 января 2012

Вы можете использовать общее предпочтение, чтобы сохранить логическое значение для isAutoStartEnabled, и проверить это значение в BroadcastReciver, запустить намерение, только если оно истинно.

В вашем случае проблема заключается не в том,Вы получаете трансляцию, но кто получает трансляцию.Удачи ..

Надеюсь, это поможет ..

6 голосов
/ 26 октября 2012

Вы должны добавить разрешение на использование android.permission.RECEIVE_BOOT_COMPLETED в свой манифест.

6 голосов
/ 21 января 2012

Я думаю, что с 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>

Класс 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 
    }
}
1 голос
/ 10 декабря 2013

У меня работает следующий код:

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

            }
        }
    }

}
1 голос
/ 21 января 2012
final SharedPreferences sharedPreferences = getSharedPreferences("Application", MODE_PRIVATE);
        boolean isAutoStartEnabled = sharedPreferences.getBoolean("isAutoStartEnabled", false);

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

Надеюсь, это поможет вам

...