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

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

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

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

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

5 ответов


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

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

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


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

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


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

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

Я надеюсь, что это поможет вам


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

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

            }
        }
    }

}