1

ウィジェットインスタンスを更新するためにAlarm Managerスルーを使用しています。Serviceこれを行っている間、いくつかの重要なスポットが欠落していると思います。

これは私が設定する方法ですAlarm Manager

public class MyWidget extends AppWidgetProvider {

    public void onEnabled(Context ctx) {
        alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context, MyService.class);
        pi = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

        // Repeat value depends on preferences.
        Long repeat = Long.parseLong(prefs.getString("update_preference", "600"));
        alarmManager.setRepeating(AlarmManager.RTC, SystemClock.elapsedRealtime(), 1000*repeat, pi); 
    }

    @Override
    public void onDisabled(Context context) {
        super.onDisabled(context);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context, MyService.class);
        PendingIntent pi = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager.cancel(pi);
    }

}

それらを説明しましょう:

  1. デバイスに電話がかかってきた、または電話をかけた場合、Edge/3Gがうまく機能していません。通話を処理するにはどうすればよいですか? 可能であれば、通話後にアラームマネージャーを再起動/トリガーすることは可能ですか? または他の提案をいただければ幸いです。
  2. デバイスがスリープ状態 (数分) の場合、ロック解除アラーム マネージャーは、間隔の値を超えていてもすぐに機能します。ただし、スリープ状態の場合、アンロック アラーム マネージャーとウィジェット レシーバーが機能しなくなった後、長い時間がかかります。繰り返しごとに眠りを超える方法は何ですか。
  3. 再起動の進行状況を制御するには? つまり、ウィジェットの更新のために再起動サービスを開始する必要があります。起動方法がわかりません。

どんな助けや提案も素晴らしいでしょう。

4

1 に答える 1

4

あなたの質問のいくつかはあまり明確ではないので、私の理解できる範囲で答えようとします:

  1. TelephonyManager.ACTION_PHONE_STATE_CHANGEDのブロードキャスト レシーバーを登録できます。
  2. の代わりにsetRepeating使用するように呼び出しを変更します。詳細はこちらAlarmManager.RTC_WAKEUPAlarmManager.RTC
  3. の放送受信機を登録できますIntent.ACTION_BOOT_COMPLETED。これは、アプリ マニフェストでレシーバーとして登録する必要があります。詳細はこちらをご覧ください
于 2012-05-14T15:57:31.700 に答える