私は私の最初のAndroidのウィジェットに問題を持っている...私はこのようにやっている:Androidのシンプルなウィジェット
public class TestwidActivity extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000);
}
@Override
public void onReceive(Context context, Intent intent) {
// v1.5 fix that doesn't call onDelete Action
final String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
final int appWidgetId = intent.getExtras().getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
this.onDeleted(context, new int[] { appWidgetId });
}
} else {
super.onReceive(context, intent);
}
}
private class MyTime extends TimerTask {
RemoteViews remoteViews;
AppWidgetManager appWidgetManager;
ComponentName thisWidget;
java.text.DateFormat format = SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM,Locale.getDefault());
public MyTime(Context context, AppWidgetManager appWidgetManager) {
this.appWidgetManager = appWidgetManager;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
thisWidget = new ComponentName(context, TestwidActivity.class);
}
@Override
public void run() {
Bitmap bm;
remoteViews.setTextViewText(R.id.Clock,
"Time = " + format.format(new Date()));
bm= BitmapFactory.decodeFile("/sdcard/myFile.png");
remoteViews.setImageViewBitmap(R.id.team11, bm);
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
}
}
が、これは2秒後の時間を印刷を停止します。私はイメージなしで時間を印刷するだけで完璧に動作しますが、このようにはありません。なぜですか?
あなたはあまりにも多くのタイマーを作成しているかのように思える - あなたは更新を呼び出すあなたのタイマーで、更新にあなたが別のタイマーを作成します。 – ravyoli
、これを変更するにはどうすればよいですか? –
よくわからない...代わりにonEnabledをオーバーライドする – ravyoli