2016-06-30 1 views
0

le code semble bien, mais pas sûr de la raison pour laquelle la fonction onreceived de AppWidgetProvider ont une action intentionnelle nulle et aucune donnée supplémentaire que l'application met.Widget android homescreen AppWidgetProvider onreceived fonction d'intention d'action et les extras sont partis/null

Code AppWidgetProvider:

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> 

J'ai essayé d'utiliser l'action android.appwidget.action.APPWIDGET_UPDATE intention, mais encore l'action recevied null et pas de données supplémentaires que l'application met. (NOTE :) doit mettre à jour le widget avec les dernières données au démarrage et ne pas utiliser les anciennes données. le même bootboradcast récepteur fonctionnera quand l'heure est changée (depuis son besoin d'obtenir le dernier du serveur)

le bootBroadcastreceiver fonctionne comme il peut obtenir l'action de timechange juste la partie appwidgetprovider ne fonctionne pas.

s'il vous plaît laissez-moi savoir si quelque chose manque.

Répondre

0

Ok, ça marche. la partie était son mal est la suivante:

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); 

et il doit être le code suivant (ne sais pas pourquoi cela fonctionne, mais pas supplémentaire a été envoyé encore, au moins cette fois l'action est envoyé au récepteur bien au lieu de null).

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

mais bien sûr obtenir des appWidgetIds sera sur la OnReceive de la classe appWidgerProvider.