2016-06-30 8 views
0

コードがうまくいくように見えますが、AppWidgetProviderのonreceived関数が意図したアクションヌルとアプリが置く余分なデータがない理由がわかりません。アンドロイドホームスクリーンウィジェットAppWidgetProvider onreceived関数インテントアクションとエキストラがなくなった/ null

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> 

私はまだ意図アクションとしてandroid.appwidget.action.APPWIDGET_UPDATEを使用して試みたが受信したヌルアクションと、アプリケーションが挿入する余分なデータはありません。

(注:ブート時にウィジェットを最新のデータに更新し、古いデータを使用しないようにする必要があります。また、同じbootboradcastレシーバは、時間が変更されたときに実行されます(サーバから最新のものを取得する必要があるため)。

bootBroadcastreceiverは、appwidgetproviderの一部が動作しないようにtimechangeアクションを取得できるため動作します。

何かが不足している場合はお知らせください。

答えて

0

よろしくお願いします。一部には、次のされ、その間違っていた:

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

、それは次のコード(この作品、なぜわからないことがありますが、余分には、まだアクションは次のように受信機に送信され、少なくともこの時間が送信されていませんnullではなく)。

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

もちろん、appWidgetIdsを取得するには、appWidgerProviderクラスを受信する必要があります。

関連する問題