AlarmManagerを使用して、年中特定の時間に起動する必要のあるバンチアラーム(通常は約50)を設定するアプリケーションを開発します。 これは、4.4以降kitkatがAlarmManagerを変更して以来使用しているコードです。LollipopのSamsungデバイスでAlarmManagerが動作しない
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
long setDate = fireDate.getTime(); // it's a calendar date defined above
Intent intent = new Intent(LOCAL_DISPLAY_MESSAGE_ACTION);
PendingIntent pending = PendingIntent.getBroadcast(ctx,
id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.RELEASE.startsWith("6")) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, setDate, pending);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
am.setExact(AlarmManager.RTC_WAKEUP, setDate, pending);
} else {
am.set(AlarmManager.RTC_WAKEUP, setDate, pending);
}
上記のコード以外にも、私はマニフェストで適切に定義された放送受信機を使用しています。
public class LocalReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
PushWakeLocker.acquire(context);
// do some stuff
PushWakeLocker.release();
}
}
詳細情報thayが役立つ可能性があります。
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="19" />
数ヶ月前、私は唯一のすべてで彼らのローカルの通知を得ることはありませんサムスンのデバイス(5.0 /5.1アンドロイド版)からの悪いレビューを取得してきたので、。つまり、アラームを発していないということです。デバイスがスキップしているか、起きていないようです。
テストでは、主に5.0.1のSamsung S4を使用していますが、私はいつもアラームを時間通りに取得するので、これは私を狂ってしまいます。 FYIこのコードはいつもかなりうまくいきました。
私はこれについて多くのことを研究しましたが、残念ながら役立つ情報はありませんでした。遅れて警報を出すわけではありません(私がいくつかのスレッドで読んだように)、彼らはまったくそれを得ていないということです。これは、ロリポップやアラームマネージャの既知の問題ではありません。
私はあなたの時間を感謝し、任意の提案が歓迎されています!
"これは私が使用しているコードです" - 'Build'VERABLE_CODES.M'をチェックするために' if'を変更します。 "私は放送受信機を使用しています" - あなたの 'WakeLock'は不必要です。' AlarmManager'によってトリガされたときに 'onReceive()'がシステム提供の 'WakeLock'で呼び出されるためです。しかし、 "do some stuff"がほんの数ミリ秒でなければ、そのロジックをIntentServiceに移動し、WakefulBroadcastReceiverを使用する必要があります。それ以外では、サムスン(SONYなど)は独自のDozeモードの設定を6.0よりも前から行っているため、「AlarmManager」はデバイス固有のホワイトリストに追加されない限り信頼できません。 – CommonsWare