コードがうまくいくように見えますが、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アクションを取得できるため動作します。
何かが不足している場合はお知らせください。