2016-05-13 14 views
2

So habe ich Broadcast-Empfänger, der beim Booten gestartet wird. Ich habe eine Aktivität, die die Informationen verwendet, die von dem Rundfunkempfänger gesammelt werden. Ich möchte, dass die Aktivität ihre Recycler-Ansicht jedes Mal aktualisieren kann, wenn der Broadcast-Empfänger angerufen wird. Das Problem besteht darin, dass die Aktivität keinen Bezug zum Broadcast-Empfänger hat. Gibt es eine Möglichkeit, dass ich meine Aktivitäten für die Übertragungen hören und aktualisieren kann?Aktivität Hören für Broadcast-Empfänger

Das einzige, was ich denken kann, um die Aktivität wird mit laufen eine sich wiederholende Aufgabe, die sich mit neuen Informationen aktualisiert werden versuchen. Das scheint mir keine gute Lösung zu sein.

Antwort

2

der beste Ansatz ist ein BroadcastReceiver registrieren - documentation on this sehen. In Ihrem Fall möchten Sie Programmatically register a broadcast receiver, so dass die onReceive(Context context, Intent intent) aus der Klasse Activity. Auf diese Weise können Sie das Recyclerview nach Belieben aktualisieren. Etwas wie:

public void onCreate(Bundle savedInstanceState){ 
    ... 
    IntentFilter filter = new IntentFilter(); 
    //you may want to set whatever filters here... 
    //define the broadcast receiver 
    receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //here you can update the RecyclerView as you desire using intent's data 
    } 
    }; 
    //register the broadcast receiver 
    registerReceiver(receiver, filter); 
} 

ich empfehlen, dass Sie dieses schöne BroadcastReceiver tutorial gehen.

Genießen.

0

Der Rundfunkempfänger für BOOT_COMPLETED Aktion registriert nichts mit der Tätigkeit zu tun hat, ist es eine separate Komponente. Also, ja, Sie haben keinen Bezug zu Ihrer Aktivität und Sie sollten keine periodische Aufgabe ausführen.

Was ich tun würde, ist, die gesammelten Daten in der Datenbank oder gemeinsam genutzten Präferenzen zu schreiben und es dann lesen, wenn Sie Ihre Aktivität tatsächlich auf dem Bildschirm ist.

Wenn Sie eine SQLite-Datenbank verwenden, können Sie eine ContentObserver benutzen, um Ihre Aktivität über Änderungen an den zugrunde liegenden Daten zu informieren. Dies funktioniert hervorragend mit Ladern.

Bei gemeinsamen Präferenzen können Sie eine OnSharedPreferenceChangeListener in Ihrer Aktivität registriert verwenden.