1

XML で許可されている 30 分よりも頻繁に更新したい TextView を使用してデジタル時計を表示するウィジェットがあります。私は例を見てきましたが、誰かが私の特定の問題を手伝ってくれるのが好きです。ウィジェットは正しく構成され、正常に動作しますが、デジタル時計であるため、正常に更新されません。

    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    final int N = appWidgetIds.length;

    for (int i = 0; i < N; i++) {
        int appWidgetId = appWidgetIds[i];

        Intent clockIntent = new Intent(context, DeskClock.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                clockIntent, 0);

        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.digitalclock);
        views.setOnClickPendingIntent(R.id.gl, pendingIntent);

        java.util.Date noteTS = Calendar.getInstance().getTime();

        String time = "kk:mm";
        views.setTextViewText(R.id.tvTime, DateFormat.format(time, noteTS));

        String date = "dd MMMMM yyyy";
        views.setTextViewText(R.id.tvDate, DateFormat.format(date, noteTS));

        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

xml android:updateperiodmills は 30 分ごとにのみ更新されますが、メイン アプリで run メソッドを使用して行ったように、少なくとも 1 秒ごとに TextView を更新または設定する必要があります。どんな助けでも大歓迎です。ありがとう

編集

public class DigitalClock extends AppWidgetProvider {

public void onUpdate(Context context, AppWidgetManager appWidgetManager,
        int[] appWidgetIds) {
    final int N = appWidgetIds.length;

    for (int i = 0; i < N; i++) {
        int appWidgetId = appWidgetIds[i];

        Intent clockIntent = new Intent(context, DeskClock.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                clockIntent, 0);

        final RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.digitalclock);
        views.setOnClickPendingIntent(R.id.gl, pendingIntent);

        final java.util.Date noteTS = Calendar.getInstance().getTime();
        final String time = "kk:mm";
        final String date = "dd MMMMM yyyy";


        BroadcastReceiver mBroadcastTime = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {

                views.setTextViewText(R.id.tvTime,
                        DateFormat.format(time, noteTS));

                views.setTextViewText(R.id.tvDate,
                        DateFormat.format(date, noteTS));
            }
        };

        IntentFilter mTime = new IntentFilter(Intent.ACTION_TIME_TICK);
        registerReceiver(mBroadcastTime, mTime);

        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

private void registerReceiver(BroadcastReceiver mBroadcastTime,
        IntentFilter mTime) {

}
}

これが私のクラスになりましたが、このメソッドを追加する必要がありました:

    private void registerReceiver(BroadcastReceiver mBroadcastTime,
        IntentFilter mTime) {

}

どうすればいいですか?

4

2 に答える 2

0

登録して、アクションBroadcastReceiverをリッスンできます。ACTION_TIME_TICK

これは毎分呼び出されます。

BroadcastReceiver mBroadcastTime = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Change the time on your widget
        }
    };

IntentFilter mTime = new IntentFilter(Intent.ACTION_TIME_TICK);
registerReceiver(mBroadcastTime, mTime);
于 2013-02-17T22:22:30.067 に答える
0

AlaramManagerこの機能を実現するには、 を使用する必要があります。

時計ウィジェットで次のように使用しました。

アラームのカウントダウン:

 class CountSecond extends CountDownTimer
        {
            public CountSecond(long millisInFuture, long countDownInterval) {
                super(millisInFuture, countDownInterval);
                // TODO Auto-generated constructor stub

                Intent intent = new Intent(ClockWidget.CLOCK_WIDGET_UPDATE);
                 intent.putExtra("theme", SelectedTheme);
                sendBroadcast(intent);
            }

            @Override
            public void onFinish() {
                // TODO Auto-generated method stub
                Log.d("CL1 Service ","--- count finish ");
                //setTimertoUpdate();


                AlarmManager alarmManager = (AlarmManager)ClockWidgetSetting.this.getSystemService(Context.ALARM_SERVICE);
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                //calendar.add(Calendar.MINUTE, 1);
                alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 60000, createClockTickIntent(ClockWidgetSetting.this));
                //finish();

            }

            @Override
            public void onTick(long millisUntilFinished) {
                // TODO Auto-generated method stub
            }

        }

そしてウィジェットの呼び出しの意図appwidgetproviderは以下の通りです。そのためonUpdate()、ウィジェットのそれが呼び出されます。

 private PendingIntent createClockTickIntent(Context context) {
            Intent intent = new Intent(ClockWidget.CLOCK_WIDGET_UPDATE);
            intent.putExtra("theme", SelectedTheme);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            return pendingIntent;
        }
于 2013-02-20T05:21:04.740 に答える