2016-06-30 30 views
0

der Code scheint gut, aber nicht sicher, der Grund, warum die onreceived Funktion von AppWidgetProvider Absicht Aktion null und keine zusätzlichen Daten, die die App setzt.android Homescreen Widget AppWidgetProvider onreceived Funktionsabsicht Aktion und Extras sind weg/null

AppWidgetProvider Code:

public class Widget_2_6 extends AppWidgetProvider{ 

    private AlarmManager alarm; 

    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     Log.e("onReceive -- Widget_2_6", "onReceive -- Widget_2_6: action: " + intent.getAction()); 
     boolean from_boot = intent.getBooleanExtra(BootCompleteBroadcastReceiver.FROM_BOOT, false); 
     if(from_boot) 
     { 
      Log.e("onReceive -- Widget_2_6", "onReceive -- Widget_2_6: onupdate start"); 
      Log.e("onReceive -- Widget_2_6", "onReceive -- Widget_2_6: onupdate end"); 
     } 
     else 
     { 
      Log.e("onReceive -- Widget_2_6", "onReceive -- Widget_2_6 not from boot: onupdate start"); 
      Log.e("onReceive -- Widget_2_6", "onReceive -- Widget_2_6 not from boot: onupdate end"); 
     } 
     super.onReceive(context, intent); 
    } 

BootCompleteBroadcastReceiver:

public final static String FROM_BOOT = "FROM_BOOT"; 
    cn = new ComponentName(context, Widget_2_6.class); 
       Intent intent_widget_2_6 = new Intent(context, Widget_2_6.class); 
       intent.setAction(INTENT_FROM_BOOT); 
       intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, manager.getAppWidgetIds(cn)); 
       intent.putExtra(FROM_BOOT, true); 
       context.sendBroadcast(intent_widget_2_6); 

AndroidManifest.xml:

<receiver android:name="com.example.linktogoogleplay.Widget_2_6"> 
      <intent-filter> 
       <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action> 
       <action android:name="com.example.linktogoogleplay.FROM_BOOT"></action> 
      </intent-filter> 

      <meta-data android:name="android.appwidget.provider" 
       android:resource="@xml/my_widget_provider_2_6" /> 
     </receiver> 

Ich versuchte, die android.appwidget.action.APPWIDGET_UPDATE als Absicht Aktion verwenden, aber nach wie vor NULL-Aktion erhalten und keine zusätzlichen Daten, die die App setzt.

(HINWEIS :) muss Widget auf die neuesten Daten beim Booten aktualisieren und nicht die alten Daten verwenden. auch derselbe bootboradcast-Empfänger wird ausgeführt, wenn die Zeit geändert wird (da er vom Server aktuell sein muss)

der bootBroadcastreceiver funktioniert, da er die timechange-Aktion erhalten kann, nur er appwidgetprovider-Teil funktioniert nicht.

Bitte lassen Sie mir wissen, ob etwas fehlt.

Antwort

0

Ok, habe es funktioniert. der Teil waren seine falsch ist folgende:

cn = new ComponentName(context, Widget_2_6.class); 
       Intent intent_widget_2_6 = new Intent(context, Widget_2_6.class); 
       intent.setAction(INTENT_FROM_BOOT); 
       intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, manager.getAppWidgetIds(cn)); 
       intent.putExtra(FROM_BOOT, true); 
       context.sendBroadcast(intent_widget_2_6); 

und es hat den folgenden Code (nicht sicher, warum dies funktioniert, aber keine extra noch, zumindest dieses Mal die Aktion an den Empfänger gesendet wurde als gesendet gut statt null).

Intent intent_widget = new Intent(INTENT_FROM_BOOT); 
      intent.putExtra(FROM_BOOT, true); 
      context.sendBroadcast(intent_widget); 

aber natürlich der appWidgetIds immer auf dem OnReceive der appWidgerProvider Klasse sein wird.