おそらく約7,8のチュートリアルを試し、ここで少なくとも30,40の回答を読みましたが、無駄でした...自分の携帯電話でウィジェットを動作させることができません。
すべてのウィジェットの実装は、ウィジェットのテキストを更新したり、クリック時にウィジェットを登録したりしません。
たとえば、このチュートリアル: http://blog.doityourselfandroid.com/2011/05/24/developing-android-home-screenwidgets/ コードをダウンロードできます。友人の電話 (Android 2.3) では正常に動作しますが、私の電話では問題なく動作します。 Log Cat で受信機が発砲しているのを確認できますが、何も更新されませんか?
これが私の現在の簡単なコードです:
1.マニフェスト
<receiver android:name=".TestWidgetProvider">
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/testwidgetprovider"
/>
<intent-filter >
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
</intent-filter>
</receiver>
<receiver android:name=".TestReceiver"/>
TestWidgetProvider
@Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){ Log.d("CSV", "Called on onUpdate"); AlarmManager am=(AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Calendar cal=Calendar.getInstance(); cal.add(Calendar.SECOND, 30); Intent intent=new Intent(context, TestReceiver.class); int N=appWidgetIds.length; for (int i=0; i<N; i++) { RemoteViews tt=new RemoteViews(context.getPackageName(), R.layout.testwidget); tt.setTextViewText(R.id.textView1,"UPDATED" +i); appWidgetManager.updateAppWidget(appWidgetIds[i], tt); Log.d("CSV", "Update widget, i = " +i + " widgetId=" + appWidgetIds[i] ); } intent.putExtra("id", appWidgetIds); intent.putExtra("duz", appWidgetIds.length); PendingIntent p1=PendingIntent.getBroadcast(context, 1, intent, 0); am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 10000, p1); super.onUpdate(context, appWidgetManager, appWidgetIds);
}
テストレシーバー
public class TestReceiver extends BroadcastReceiver { private static final String tag="TestReceiver"; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub int[] ID; Bundle extras=intent.getExtras(); ID=extras.getIntArray("id"); int duz=intent.getIntExtra("duz", 0); Log.d("CSV", "update widget id=" +ID); double b=Math.random(); int i=(int) ((b*10+1)%10); RemoteViews rv=new RemoteViews(context.getApplicationContext().getPackageName(), R.layout.testwidget); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext()); for (int a=0; a<duz; i++) { rv.setTextViewText(R.id.textView1, "update random: " + a); appWidgetManager.updateAppWidget(ID[a], rv); Log.d("CSV", "Update widget, a = " +a + " widgetId=" + ID[a] ); } /* ComponentName provider = new ComponentName(context, TestWidgetProvider.class); appWidgetManager.updateAppWidget ( provider, rv); */
}
ウィジェット xml
<?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="200dp" android:minHeight="120dp" android:updatePeriodMillis="0" android:initialLayout="@layout/testwidget" android:resizeMode="horizontal|vertical" > </appwidget-provider>
私が何日も立ち往生しているのを助けてください...
編集1. 最初の回答で提案されたようにメインアクティビティを追加しましたが、変更はありません。
また、ウィジェットを最初に画面に設定したときはテキストが実用的に更新されませんが、ウィジェットを見つけることができないようですが、2回目にウィジェットを画面に配置すると、onEnableのコードに従ってテキストが変更されますか?
編集 2: 今のところ問題を解決する回答を投稿し、ウィジェットを更新しました
編集 3. Richard Le Mesurier の回答を正しいものとしてマークしました。これは、彼のデモ コードが、ネットワーク操作中にサービスを介してウィジェットを管理することについて非常に詳細に説明されているためです。私の問題だけでなく、私が尋ねようとしていた他の多くの問題もカバーしています。ウィジェットで本格的な作業を行う場合は、このデモを学習することをお勧めします。