2010-05-12 2 views
2

У меня возникла проблема с инициализацией моего приложения после автозапуска.Android: параметры загрузки и загрузки при загрузке

Мне удалось запустить автозапуск, после перезагрузки приложение отображается как начатое, но таймер не является. Я предполагаю, что функция onCreate MyApp не вызывается, когда я вызываю context.startService(). Таймеры устанавливаются в функции doActivity() MyApp.

Я бы очень признателен за любые советы о том, что я могу сделать неправильно или ссылки на хорошие учебные пособия. :)

манифеста:

<activity android:name=".MyApp" 
       android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <receiver android:name="MyApp_Receiver"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver>[/syntax] 

MyApp_Receiver является BoradcastReciever со следующими двумя функциями

public void onReceive(Context context, Intent intent) { 
    // Do Autostart if intent is "BOOT_COMPLETED" 
    if ((intent.getAction() != null) && (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))) 
    { 
     // Start the service 
     context.startService(new Intent(context, MyApp.class)); 
    } 
    // Else do activity 
    else 
     MAIN_ACTIVITY.doActivity(); 
} 

public static void setMainActivity(MyApp activity) 
{ 
    MAIN_ACTIVITY = activity; 
} 

MyApp простирается PreferenceActivity и имеет OnCreate() и doActivity(), doActivity() считывает настройки и устанавливает таймер в зависимости от них.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Show preferences 
    addPreferencesFromResource(R.xml.preferences);; 

    // Register Preference Click Listeners 
    getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 


    // Prepare for one-shot alarms 
    if (mIntent == null) 
    { 
     mIntent = new Intent(MyApp.this, MyApp_Receiver.class); 
     mSender = PendingIntent.getBroadcast(MyApp.this, 
       0, mIntent, 0); 
     MyApp_Receiver.setMainActivity(this); 
    } 

    // Refresh and set all timers on start 
    doActivity(); 
} 

ответ

3

таймеры установлены в doActivity() функции MyApp.

Это никогда не сработает. MyApp - это действие, которое не будет создано до тех пор, пока пользователь не войдет и не запустит его.

Прочтите SharedPreferences в onReceive() и установите там аварийные сигналы.

+0

Спасибо! Приятно знать, что. :) Пытаясь реализовать его, я пришел к следующей проблеме. Я добавляю свои настройки, используя: addPreferencesFromResource (R.xml.preferences); Я не могу назвать их так, чтобы в onRecieve() я мог читать их с помощью: context.getSharedPreferences ("prefs_myApp", Context.MODE_PRIVATE); Я действительно хочу создать их из XML, а не из кода ... – BBoom

+2

Используйте 'PreferenceManager.getDefaultSharedPreferences'. – CommonsWare

+0

Удивительный, спасибо! Ты жжешь. :) Прекрасно работает. (Я бы проголосовал за вас, если бы у меня хватило репутации: P) – BBoom

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