2012-01-21 1 views
11

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

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

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

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

+0

возможно дубликат [Попытка запуска службы при загрузке на Android] (http://stackoverflow.com/questions/2784441/trying-to -start-a-service-on-boot-on-android) – Christina

ответ

10

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

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

Я надеюсь, что это помогает ..

+0

, но после завершения загрузки сначала будет выведено мое onCreate моего производного класса приложения перед вызовом onReceive трансляции трансляции. Это означает, что мое приложение создано или запущено. Но я не хочу запускать приложение, если автоматический запуск отключен. –

+0

Можете ли вы разместить содержимое файла манифеста? Я думаю, что проблема может быть там ... –

+0

Убедитесь, что в вашем файле манифеста фильтр намерений для BOOT_COMPLETE не совпадает с вашим тегом Activity, но с вашим тегом Receiver. –

6

Я думаю, что из Android 3.1 года ваш BroadcastReceiver который получает BOOT_COMPLETED намерения его не будет работать. Пользователь должен запускать приложение, взаимодействуя с ним.

Итак, после загрузки устройства все сторонние приложения лежат как остановка.

И в настоящее время приложения вы можете использовать SharedPreferences для Auto-Start приложения ..

UPDATE: (Только для версии 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 
    } 
} 
+0

В настоящее время я уже прочитал флаг автоматического запуска с использованием SharedPreference. Но как можно не запускать приложение, когда автоматический запуск отключен? Можете ли вы дать ответ в деталях? –

+0

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

+1

Нет. Если вы зарегистрируете радиовещательный приемник, тогда, когда какое-либо действие совершается на устройстве для этой трансляции, тогда у вас есть это, вы не можете управлять после регистрации. Просто используйте в своем состоянии. – user370305

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

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

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

+0

В приложении есть сервис, который запускается в фоновом режиме при создании приложения, в приложении есть не только активность. –

+0

Не могли бы вы поместить свой код в основной поток –

+0

Из настроек, когда вы отмените выбор флажка, в SharedPreference установите значение «isAutoStartEnabled» равным false, иначе сделайте это true. И In Boot Complete проверьте значение «isAutoStartEnabled» из SharedPreference. –

6

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

1

это работает для меня:

public class BootCompleteReceiver extends BroadcastReceiver { 
    public static final String PREFS_NAME = "MyPrefsFile"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    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); 

     } 
    } 



} 

}

 Смежные вопросы

  • Нет связанных вопросов^_^