0

I zwei Modul haben, app und outersheme, gibt es eine MainBroadcastReceiver in Modul app (Broadcast erstreckt), besteht ein MainActivity ist (Verlängerung Activity) in outersheme, der Code wie folgt ist:Wird die App Broadcast empfangen, wenn sie nicht gestartet wird?

outershceme MainActivity Kerncode:

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.activity: // start SecondActivity in app module by implicit 
      Intent activityIntent = new Intent("SecondActivity"); 
      activityIntent.setData(Uri.parse("SteveqiSecondActivity://")); 
      startActivity(activityIntent); 
      break; 
     case R.id.broadcast: // start MainBroadcastReceiver in app module by implicit 
      Intent broadcastIntent = new Intent(); 
      broadcastIntent.setAction("Broadcast"); 
      // add this the app module may be wakeup. 
      broadcastIntent.setData(Uri.parse("SteveqiBroadcast://")); 
      sendBroadcast(broadcastIntent); 
     default: 
      break; 
    } 
} 

app Manifest Kern-Code:

 <activity 
     android:name="com.twlkyao.myscheme.SecondActivity" 
     android:label="@string/title_activity_second" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="SecondActivity" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:scheme="SteveqiSecondActivity" /> 
     </intent-filter> 
    </activity> 
    <receiver android:name="com.twlkyao.myscheme.MainBroadcastReceiver"> 
     <intent-filter> 
      <action android:name="Broadcast" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:scheme="SteveqiBroadcast" /> 
     </intent-filter> 
    </receiver> 

Teil I:

Wenn Sie auf die R.id.activity Taste ist die SecondActivity in App-Modul nach oben, um die App-Modul, zu diesem Zeitpunkt die R.id.broadcast Schaltfläche klicken, kann die MainBroadcastReceiver die Sendung empfangen, dann den Prozess der App-Modul töten, klicken Sie auf die R.id.broadcast Schaltfläche , die MainBroadcastReceiver kann die Übertragung erneut empfangen und das App-Modul erneut beenden und auf die Schaltfläche R.id.broadcast klicken. Die MainBroadcastReceiver kann die Übertragung nie empfangen.

Teil II:

Als ich die Leitung <data android:scheme="SteveqiBroadcast" /> des MainBroadcastReceiver zu entfernen, und wiederholen Sie die Teil I Schritte kann die MainBroadcastReceiver nie die Sendung empfangen.

Meine Fragen sind:

1.Is, dass die App-Modul am Leben sein muss, damit BroadcastReceiver Sendung empfangen kann?

2.Warum kann die BroadcastReceiver Broadcast empfangen, wenn <data android:scheme="SteveqiBroadcast" /> vorhanden sind, und Broadcast nicht empfangen kann, wenn die Leitung nicht beendet?

Antwort

1

entferne ich das Problem gelöst haben, dann ist es wegen des ROM, ich glaube, MIUI die Broadcast einschränkt, ich habe erfolgreich die Demo auf SamSung Telefon laufen.

0

Die Anwendung kann immer noch Nachricht von Broadcast-empfangen, wenn Sie WAKE_LOCK Erlaubnis für sie fest:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
+0

Ich habe versucht, fügen Sie die Berechtigung, kill app-Modul, verwenden Sie outerscheme Modul Broadcast senden, kann das App-Modul noch Modul nicht empfangen. – twlkyao

0

Meine Antworten auf Ihre Fragen

1) Keine Notwendigkeit, aber im Falle von dynamischen Broadcast-Receiver Ihre Broadcast-Empfänger wird aktiv sein, bis unRegisterReceiver heißt

2) Wenn Sie einen Intent Broadcast senden, setzen Sie Dada

Intent broadcastIntent = new Intent(); 
    broadcastIntent.setAction("Broadcast"); 
    // add this the app module may be wakeup. 
    broadcastIntent.setData(Uri.parse("SteveqiBroadcast://"));//Check this 
    sendBroadcast(broadcastIntent); 

In Ihrem Manifest Ihre Intent-Filter erwartet, dass die Daten (SteveqiBroadcast: //) durch Vorsatz

<data android:scheme="SteveqiBroadcast" /> 
gesendet ausgestrahlt

Also, wenn Sie oben Schema entfernen manifest, es wird nicht die Sendung empfangen. Wenn Sie die Sendung in diesem Zustand erhalten wollen auch dann

broadcastIntent.setData(Uri.parse("SteveqiBroadcast://")); 
+0

Ja, ich beide entfernen sie, das Problem ist etwas mit dem ROM. – twlkyao