2013-08-15 20 views
12

Ich habe zwei Apps, die ich gemacht habe, und versuche, eine Absicht von einem zum anderen zu senden, aber die Absicht wird nie zu onReceive() jedoch dieses Problem ist nur eine Möglichkeit. Die erste App kann an die zweite senden, aber die zweite kann keine Informationen zurücksenden. Ich verwende eine andere Absichtsaktion, um von der zweiten zur ersten zu senden, aber ansonsten sind sie identisch. Irgendwelche Ideen, warum das nicht funktioniert? Ich habe alles versucht, was mir einfällt, und habe die meisten Beiträge gelesen, die ich hier finden konnte, ohne Erfolg.Android-Broadcast-Empfänger keine Absicht erhalten

Es stürzt nicht ab oder gibt mir keine Hinweise darauf, was im Logcat passiert, es macht einfach nichts.

Sendefunktion

private void sendFinishLog(String ID, String Cond) 
{ 
    Log.d("me", "send finish log"); 
    Intent logIntent = new Intent(); 
    logIntent.putExtra("ID", ID); 
    logIntent.putExtra("Cond", Cond); 
    logIntent.setAction("com.me.intent.finishlog"); 
    Log.d("me","logIntent : " + logIntent.toString() 
     +logIntent.getExtras().toString()); 
    sendBroadcast(logIntent); 
} 

Klasse erhalten

public class LogReceiver extends BroadcastReceiver { 

    public static ArrayList<LogDataHolder> logData = new ArrayList<LogDataHolder>(); 
    private boolean found; 
    static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
    private static String lasttime; 
    private static String now = "Boot time"; 
    @Override 
    public void onReceive(Context cont, Intent logIntent) 
    { 
     Log.d("me","On receive"); 
       etc..... 
    } 

Empfangen App-Manifest

<!-- for receiving logs --> 
<receiver 
    android:name = "LogReceiver" 
    android:enabled="true"> 
    <intent_filter> 
     <action android:name="com.me.intent.finishlog" /> 
    </intent_filter> 
</receiver> 
+1

haben Sie den Empfänger registriert? – bofredo

+0

Im Manifest – Cob50nm

+0

nein, programmgesteuert – bofredo

Antwort

7

etwas wie werden muß hinzugefügt

public void onPause() { 
    getActivity().unregsiterReceiver(mLogreceiver); 
} 

edit: Ich dachte nur, dass Ihre LogReceiver-Klasse hat auch keinen Konstruktor. Sie benötigen ein aswell schreiben:

private LogReceiver mLogReceiver = new LogReceiver() { 

und danach können Sie die OnReceive-Methode verwenden, wie Sie es bereits in Ihrem Code haben.

+1

die überschriebene onReceive-Methode verwendet werden muss innerhalb der {} meiner letzten Zeile. – bofredo

+2

Sie müssen dies nicht tun, wenn Sie es im Manifest tun, obwohl – Cob50nm

+0

das gilt auch für den Konstruktor? – bofredo

3

es wieder versuchen wie diese.

public void onResume() { 
    IntentFilter filter = new IntentFilter(); 
    getActivity().registerReceiver(mLogReceiver,filter); 
} 

und für un-Register: Die Kategorie kann

<!-- for receiving logs --> 
<receiver 
    android:name = "LogReceiver" 
    android:enabled="true"> 
    <intent_filter> 
     <action android:name="com.me.intent.finishlog" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     </intent_filter> 
</receiver> 
+0

Was bedeutet der Standardwert? Bedeutet es ein Standard-Android-oder kann es für benutzerdefinierte Absicht Aktionen verwendet werden? – Cob50nm

+0

Wenn Sie keine Aktion hinzufügen müssen, müssen Sie keine Kategorie hinzufügen. Aber wenn Sie die Aktion hinzufügen, denke ich, dass es notwendig ist, eine Kategorie hinzuzufügen, um anzugeben, wie diese Aktion – Eden

0

Sie erklären den Empfänger in dem Manifest als:

android:name = "LogReceiver" 

Die documentation besagt, dass Name sein sollte:

Der Name der Klasse, die den Rundfunkempfänger implementiert, eine Unterklasse von BroadcastReceiver . Dies sollte ein vollständig qualifizierter Name der Klasse sein (z. B. "com.example.project.ReportReceiver"). Wenn das erste Zeichen des Namens jedoch ein ". ReportReceiver" ist, wird als Kurzschreibweise der Paketname angehängt, der im Element angegeben ist.

Mit anderen Worten, es muss das Paket enthalten. Versuchen Sie, den Namen:

android:name = ".LogReceiver" 

oder

android:name = "com.me.yourpackagename.LogReceiver" 
+1

Ich habe das versucht und es hat nicht funktioniert – Cob50nm

+0

Veröffentlichen Sie ein komplettes Projekt. –

+0

komplettes Projekt ist> 50.000 Zeilen Code, so dass es nicht wirklich eine Option ist – Cob50nm

1

Mein Problem wurde gelöst, als ich den Hörer austragen vom OnPause entfernt(). Methode.

Verwandte Themen