Android Alarm Manager avec récepteur de radiodiffusion enregistré dans le code plutôt que manifeste

StackOverflow https://stackoverflow.com/questions/3447594

Question

Je veux utiliser une alarme pour exécuter un code à un certain moment. Je l'ai mis en œuvre avec succès une alarme avec le récepteur de radiodiffusion enregistré dans le manifeste, mais la façon dont je le comprends, cette méthode utilise une classe distincte pour le récepteur de radiodiffusion.

Je peux utiliser cette méthode pour démarrer une autre activité, mais je ne peux pas l'utiliser pour exécuter une méthode dans mon activité principale?

( comment puis-je informer un fonctionnement l'activité d'un récepteur de diffusion? )

J'ai essayé d'enregistrer mon récepteur de radiodiffusion dans mon activité principale comme expliqué dans la réponse ci-dessus.

private BroadcastReceiver receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show();
        uploadDB();         
    }
};    

public void onResume() {
    super.onResume();

    IntentFilter filter = new IntentFilter();
    filter.addAction(null);

    this.registerReceiver(this.receiver, filter);
}

public void onPause() {
    super.onPause();

    this.unregisterReceiver(this.receiver);
}

Cependant j'ai pu obtenir ce travail avec le gestionnaire d'alarme, je ne suis pas certain de la façon dont je dois relier l'intention d'alarme au récepteur de radiodiffusion. Pourrait-il point que quelqu'un me un exemple d'enregistrement d'un gestionnaire d'alarme récepteur de radiodiffusion dynamique dans l'activité? Ou expliquer comment je ferais cela?

Était-ce utile?

La solution

Comment cela?

Intent startIntent = new Intent("WhatEverYouWant");
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent);

Et puis dans votre fichier Manifest.xml:

<receiver android:name="com.package.YourOnReceiver">
   <intent-filter>
       <action android:name="WhatEverYouWant" />
   </intent-filter>
</receiver>

pour autant que je sais que vous avez encore à déclarer le récepteur dans le manifeste. Je ne sais pas si vous pouvez le mettre à une instance privée à l'intérieur de votre activité. Vous pouvez déclarer un intérieur OnReceive de votre activité et appeler (si le BroadcastReceiver dispose d'une interface. Je ne sais pas si elle le fait.)

Autres conseils

Démarrer une intention d'alarme de l'endroit où vous voulez commencer l'alarme. écrire ci-dessous le code de l'endroit où vous voulez commencer à écouter l'alarme

Intent myIntent = new Intent(getBaseContext(), **AlarmReceiver**.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.MINUTE, shpref.getInt("timeoutint", 30));
                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

Et dans la diffusion récepteur écrire le code que vous souhaitez recevoir. Et dans le ci-dessous menifest

<receiver android:name=".AlarmReceiver" android:process=":remote"/>

Vous pouvez aussi mettre l'alarme répétitive aussi. Je espère que ça aide!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top