1

N 秒ごとに通知音を鳴らすアラーム ブロードキャスト レシーバーから呼び出されるアクティビティがあります。これは、次のコードで実現されます。

repeating_notification_sound_timer.schedule(ring_the_buzzer_task, 0, 1000 * N);

アクティビティの onCreate 関数の早い段階で、次のコードがあります。

pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
            wakeLock.acquire();

アラームがトリガーされた時点で電話が起動していた限り、これはすべて完全に機能します. ただし、電話がスリープ状態の場合、通知音は一度だけ再生され、二度と再生されません。プログラムはクラッシュしたり、エラーを報告したりしません。まるで、repeating_notification_sound_timer が 1 回しか機能しないかのようです! 何か案は?

編集:最初にアラームを設定するコードは次のとおりです。

static void set_alarm(long alarm_time_in_millis,Context cont,AlarmManager alarm_manager,String str)
{
    Intent launchIntent = new Intent(cont, to_call_when_alarm_goes_off.class);

    launchIntent.putExtra("string_passed_in_bundle", str);

    launchIntent.setAction(to_call_when_alarm_goes_off.CUSTOM_INTENT);

    PendingIntent pIntent = PendingIntent.getBroadcast(cont,0, launchIntent, 0);
    alarm_manager.cancel(pIntent);

    alarm_manager.set(AlarmManager.RTC_WAKEUP,alarm_time_in_millis, pIntent);
}

編集:私が持っているマニフェストで:

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
4

2 に答える 2

1

AlarmManager アラームをウェイクアップの真正性に設定する必要があります。そうしないと、携帯電話が別の何かによってウェイクアップされるまで、ブロードキャストが起動するのを待機します。

イーサRTC_WAKEUP

またはELAPSED_REALTIME_WAKEUP

詳細については、アラーム コードを入力してください。

于 2012-10-01T15:12:29.470 に答える
0

長期間にわたって、またはアプリがバックグラウンドにある間にタイミングを追跡する何かが必要な場合は、本当にサービスを使用する必要があります。

于 2012-10-01T14:56:37.520 に答える