2016-06-15 33 views
0

Wenn ich lokale Broadcast von einem Dienst (IntentService) senden, wird es nicht in OnReceive in meinem AppWidgetProvider empfangen, aber die gleiche Broadcast wird empfangen, wenn nicht lokal gesendet. Es ist normal?Android AppWidgetProvider empfängt keine lokalen Broadcasts

EDIT: vergaß ich, dass in meinem AndroidManifest zu erwähnen ich <action> innen <intent-filter> für AppWidgetProvider <receiver> wie diese:

<receiver android:name="MyAppWidget"> 
<intent-filter> 
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    <action android:name="my.package.MY_ACTION" /> 
</intent-filter> 
... 

und in MyAppWidget erstreckt AppWidgetProvider in 'OnReceive' Ich habe:

if (intent.getAction().equals("my.package.MY_ACTION")) { 
    // do something 
} 

Antwort

2

Wenn Sie mit "lokale Rundsendung" meinen, LocalBroadcastManager, eine AppWidgetProvider wird nicht auf diese standardmäßig reagieren. Ein AppWidgetProvider hört System-Broadcasts mit seinem <receiver> Element.

Darüber hinaus sollte dies nicht notwendig sein. Es gibt nichts Magisches an einem AppWidgetProvider — es ist nur ein ausgewiesener Ort für das System, Sie über Änderungen in App-Widget-Status zu informieren. Sie können den Inhalt Ihres App-Widget aus beliebigen Teilen Ihrer App mithilfe von AppWidgetManager aktualisieren.

+0

Was meinen Sie mit "AppWidgetProvider wird nicht standardmäßig auf diese reagieren?" Muss ich sendBroadcast (Intent) anstelle von LocalBroadcastManager.getInstance (Kontext) .sendBroadcast (Intent) verwenden, um eine benutzerdefinierte (Nicht-System-) Übertragung an AppWidgetProvider zu senden? –

+0

@MarekJ .: "Muss ich sendBroadcast (Intent) verwenden" - ja, oder senden Sie überhaupt keine Sendung, nach dem zweiten Absatz meiner Antwort. – CommonsWare

+0

Danke für Hilfe! Ich frage mich, warum es nirgends in der AppWidgetProvider-Dokumentation heißt, dass lokale Broadcasts nicht empfangen werden? –