2010-05-12 5 views
2

J'ai un problème avec l'initialisation de mon application correctement après l'autostart.Android: application de démarrage automatique et préférences de chargement

J'ai réussi à faire fonctionner un démarrage automatique, après un redémarrage, l'application est affichée comme démarrée, mais pas celle de la minuterie. Ma conjecture est que la fonction "onCreate" de MyApp n'est pas appelée quand j'appelle le context.startService(). Les minuteurs sont définis dans la fonction doActivity() de MyApp.

J'apprécierais grandement des conseils sur ce que je pourrais faire de mal ou des liens vers de bons tutoriels. :)

Le manifeste :

<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 est un BoradcastReciever avec les deux fonctions suivantes

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 étend PreferenceActivity et a une onCreate() et un doActivity(), le doActivity() lit les préférences et définit une minuterie en fonction de celles-ci.

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

Répondre

3

Les minuteries sont réglées dans le doActivity() fonction de MyApp.

Cela ne marchera jamais. MyApp est une activité qui ne sera pas créée avant que l'utilisateur n'y accède et la lance.

Lisez votre SharedPreferences dans onReceive() et réglez les alarmes à cet endroit.

+0

Merci! Il est bon de savoir que. :) Essayer de l'implémenter Je suis arrivé au prochain problème. J'ajoute mes préférences en utilisant: addPreferencesFromResource (R.xml.preferences); Je n'arrive pas à les obtenir de telle sorte que dans onRecieve() je peux les lire avec: context.getSharedPreferences ("prefs_myApp", Context.MODE_PRIVATE); Je veux vraiment les créer à partir de XML et non à partir de code ... – BBoom

+2

Utilisez 'PreferenceManager.getDefaultSharedPreferences'. – CommonsWare

+0

Génial, merci! Tu gères. :) Fonctionne parfaitement maintenant. (Je vous voterais si j'avais assez de réputation: P) – BBoom

Questions connexes