Приложение для автоматического запуска после завершения загрузки в Android

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

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

            }
        }
    }

}