6

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このコードはいつもかなりうまくいきました。

私はこれについて多くのことを研究しましたが、残念ながら役立つ情報はありませんでした。遅れて警報を出すわけではありません(私がいくつかのスレッドで読んだように)、彼らはまったくそれを得ていないということです。これは、ロリポップやアラームマネージャの既知の問題ではありません。

私はあなたの時間を感謝し、任意の提案が歓迎されています!

+0

"これは私が使用しているコードです" - 'Build'VERABLE_CODES.M'をチェックするために' if'を変更します。 "私は放送受信機を使用しています" - あなたの 'WakeLock'は不必要です。' AlarmManager'によってトリガされたときに 'onReceive()'がシステム提供の 'WakeLock'で呼び出されるためです。しかし、 "do some stuff"がほんの数ミリ秒でなければ、そのロジックをIntentServiceに移動し、WakefulBroadcastReceiverを使用する必要があります。それ以外では、サムスン(SONYなど)は独自のDozeモードの設定を6.0よりも前から行っているため、「AlarmManager」はデバイス固有のホワイトリストに追加されない限り信頼できません。 – CommonsWare

答えて

9

あなたの問題(または悪夢)はSamsung Smart Managerです。このアプリは、2015年以来、すべてのサムスンの携帯電話にプリインストールされており、使用されていないAppsを非アクティブ化するはずです。 「どのアプリが使用されていないかはどのように分かりますか?

ユーザーが3日間起動していないすべてのアプリが無効になります。

残りのAlarmManagerエントリはすべて削除されています。あなたは "開発者フォーラム"でそれについて読むことができます。これらのスレッドがスタッフによって削除されるまで、hereまたはhereにお気軽にお問い合わせください。私はまだ三星からの誰かがこの話題に応えてくれるのを見たことがない。

これを「修正」する唯一の方法は、アプリのユーザーにその状況を通知し、Smart Managerでアプリをホワイトリストに登録する方法を示すことです。私たちは、ユーザーのためにこれを行う方法を示す、ステップバイステップの手順でウェブサイトをセットアップしなければなりませんでした。

バックグラウンドサービスを設定したり、AlarmManagerを6時間ごとに呼び出すと思うかもしれません。これらのハックは機能しません。

+2

あなたの発見を私と共有してくれてありがとう!あなたは私の一日を救った。サムスンがこのようなことをして、それについて責任を負わないのは本当に面倒です。 smh。 –

+2

UPDATE:パッケージ名に「警告」または「アラーム」が含まれている場合、Smart Managerはそのアプリケーションを無効にしません。詳細はこちら:http:// stackoverflow。com/a/34085645/128092 – saibotd

+0

この場合、AlarmManagerの代わりにJobSchedulerを使用すると役立つかどうかは分かりますか? – jakk

関連する問題