4

Android Dev Guide に記載されているように、ウィジェットをより頻繁に更新する場合は、 を使用しAlarmManagerて、デバイスを復帰させないアラームを設定する必要があります。

原則として、クラスによって提供される標準メカニズムAppWidgetProviderと、xml ファイルの android:updatePeriodMillis を使用した簡単なセットアップを使用しないでください。

申し訳ありませんが、ガイドには「AlarmManager を使用する、RTCまたはELAPSED_REALTIME... を使用する」と記載されていますが、ウィジェットを更新するだけのインテントを正確に送信するにはどうすればよいですか?

PendingIntentデフォルトの動作を模倣するために必要なコードを誰か教えてください。ウィジェット ID を取得する方法や、どのアクションを使用すればよいかなどの手がかりがありません...悲しいことに、開発者ガイドはその時点で説明を停止します! どのアクションのエキストラとして何が必要ですか?

なぜ私が 30 分よりも頻繁に更新したいのか興味がある人のために: 私のウィジェットは次のバスがいつ駅を出発するかを示します。バスは 20 分おきに運行されているので、次のバスの出発時刻を表示するウィジェットを 1 分ごとに更新する (これが私が望んでいることです!!) か、次のバスの出発時刻を表示するかの 2 つのオプションがありました。少なくとも20分ごとに更新する必要があります!

さて、もちろん、デバイスがスリープ状態のときは、これでスリープ状態から復帰することはありません。したがって、開発者ガイドのこのセクションに関する私の理解では、これが正しい実装方法であるということです。誰かが私が間違っていると思いますか?ああ、もう 1 つ確認したいことがあります。ウィジェットを更新する必要があるときにデバイスがスリープ状態で、デバイスがスリープ状態になっているためにアラームが発行されない場合、デバイスが起動するとすぐに更新されますか?

ご協力いただきありがとうございます!!

PS: ウィジェット プロバイダーの xml 定義では、ブール スイッチによって単純に「デバイスを起動しない」ことを許可しないのはなぜなのか、本当に疑問に思っています。とにかくデバイスを起動するには、どのような種類のウィジェットが必要ですか??? ;-)

これは私が今までやってきたところですが、うまくいきません - 何も起こりません:

private void startAlarm(Context pContext) {
    Log.d(TAG, "startAlarm");
    AlarmManager am = (AlarmManager) pContext.getSystemService(Context.ALARM_SERVICE);

    Intent intent = new Intent("android.appwidget.action.APPWIDGET_UPDATE");
    intent.setClass(pContext, getClass());
    PendingIntent pi = PendingIntent.getBroadcast(pContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

    am.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, pi);
}
4

2 に答える 2

2

デフォルトの動作を模倣する PendingIntent を形成するために必要なコードを誰か教えてください。

私の知る限り、「デフォルトの動作を正確に模倣する」ことはできないため、そうしません。で処理するカスタム アクションを に送信するか、アプリ ウィジェットの背後にある実際のスマート機能を使用している を呼び出すアラームAlarmManagerを使用するだけです。PendingIntentAppWidgetProvideronReceive()startService()IntentService

ウィジェット ID を取得する方法がわかりません

onUpdate()アプリ ウィジェットが最初に画面に表示されたときなど、実際の呼び出しからウィジェット ID を保存しました。アラームが鳴ったら、すべてのアプリ ウィジェットを更新します。

毎分ウィジェットを更新し、次のバスの出発時刻を表示します (それが私の望みです!!)

これをユーザーが構成できるようにしてください。

ああ、もう 1 つ確認したいことがあります。ウィジェットを更新する必要があるときにデバイスがスリープ状態で、デバイスがスリープ状態になっているためにアラームが発行されない場合、デバイスが起動するとすぐに更新されますか?

私の知る限り、はい、しかし私は種類のないアラームを使用していません_WAKEUP.

于 2011-02-13T15:32:30.293 に答える
0

彼らがまだあなたを助けることができるかどうかはわかりませんが、私は数日前にAndroidウィジェットについていくつかの投稿を書きました。

これがAlarmManagerに関するものです。

http://malubu.wordpress.com/2012/06/05/take-your-time-widgets-and-alarmmanager/

于 2012-06-20T22:35:47.937 に答える