Die Kommunikation zwischen BroadcastReceiver und Aktivität - android
Habe ich einen broadcast receiver in meiner app das ausgelöst wird, jedes mal, wenn der Benutzer erhält einen eingehenden Anruf. Nun, wenn es passiert, muss ich den broadcast receiver aufrufen einer bestimmten Methode bei einer bestimmten Tätigkeit. Nun, ich habe versucht, diese Methode statisch und daher verfügbar, aber etwas sagt mir, es ist eine sehr schlechte Idee.
Entsprechend, habe ich versucht zu instanziieren der broadcast receiver innerhalb meiner Tätigkeit, ohne Sie zu deklarieren in meinem manifest aber das problem ist, wenn die app ausgeschaltet ist, die Aktivität ist nicht vorhanden und deshalb kann ich nicht aufrufen, meine Methode.
Also meine Frage ist - Wie kann ich das aufrufen diese Methode, wenn der broadcast receiver befeuert wird, ohne dass es "public static"?
Hier ist meine Aktivität-code(die ich gelöscht habe die nicht relevanten Teile)
package com.silverfix.ringo.activities;
import com.silverfix.ringo.R;
import com.silverfix.ringo.activities.fragments.DataManagerFragment;
import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public class RingtonesActivity extends Activity{
private DataManagerFragment dataManagerFragment;
private IntentFilter filter;
private BroadcastReceiver phoneCall;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ringtones);
ActionBar ab = getActionBar();
ab.setDisplayShowTitleEnabled(false);
ab.setDisplayHomeAsUpEnabled(true);
dataManagerFragment = new DataManagerFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(dataManagerFragment, "DataManagerFragment");
ft.commit();
filter = new IntentFilter();
filter.addAction("android.intent.action.PHONE_STATE");
phoneCall = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
dataManagerFragment.act();
}
};
registerReceiver(phoneCall, filter);
}
}
bedeutet, dass die Methode unbedingt in
Activity
Klasse?Was macht die Methode???
Sie haben zu verwenden, pendingIntent zu Benachrichtigen.
Deklarieren Sie die Methode im gleichen fragment, in dem Sie sich registrieren dem broadcast oder Erstellen Sie eine helper-Klasse verschieben der Methode in diesem. durch erstellen des Objekt dieser Klasse. Sie werden in der Lage, dies zu tun.
InformationsquelleAutor David Lasry | 2015-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie Beobachter , wie
Empfänger kann verwendet werden via manifest.
ObservableObject - muss singleton.
Super Antwort! Ich mag die Verwendung von design patterns)
Was ist der Vorteil im Vergleich zu nur die Verwendung einer statischen variable? Ich meine, singleton statisch ist sowieso, richtig?
Nicht BroadcastManager und BroadcastReceiver Analog zu dem Observer-Muster? Was hindert Sie verschieben Sie den code in MainActivity.update MyReceiver.onReceive (und damit vergessen über Zwischenhändler)?
Ly! Ich weiß nicht, warum ich nicht daran denken, zu Beobachten. Dank
InformationsquelleAutor Andreyua
Dies könnte helfen: wie kann ich informieren, eine Aktivität aus einem broadcast receiver?
Können, können Sie auch versuchen, mit Beobachter
Etwas wie:
In dem broadcast-receiver:
und die Aktivität:
InformationsquelleAutor Archie.bpgc
Wenn jemand braucht zwei-Wege-Kommunikation zwischen einem BroadcastReceiver und eine Aktivität, schrieb ich diese utility-Klasse, die vereinfacht das aufrufen von Methoden, die auf einander, während noch in Erinnerung-sicher.
https://gist.github.com/Jenjen1324/4a0c03beff827082cb641fc8fe2c4e71
InformationsquelleAutor JensV