2016-07-04 1 views
2

AlarmManagerを使用して通知用のアラームを設定しようとしています。ユーザーがリストアイテムを選択するとアラームが設定されるので、毎回別のアラームを設定しようとしています(一意のIDがpendingIntentに渡される)。リストアイテムが選択されます。setExactメソッドの呼び出しをスキップしました。アラームが期待どおりに起動しない

アラームを設定するために使用されるコード:

public static void setAlarm(Context context, Movie movie, Schedule schedule){ 
    Intent arg = new Intent(context, NotifyService.class); 
    arg.putExtra(NotificationHelper.fetch_schedule_id, schedule.getId()); 
    arg.putExtra(NotificationHelper.fetch_movie_id, movie.getId()); 
    PendingIntent pendingIntent = PendingIntent.getService(context.getApplicationContext(), (int) schedule.getId(), arg, PendingIntent.FLAG_CANCEL_CURRENT); 
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 
     am.setExact(AlarmManager.RTC_WAKEUP, schedule.getStart().getTime(), pendingIntent); 
    else 
     am.set(AlarmManager.RTC_WAKEUP, schedule.getStart().getTime(), pendingIntent); 
} 

私が扱ってる問題呼び出しが設定(またはsetExact)するということである方法を常時実行されていません。それは時間の半分で動作しますが、ユーザーが2つ以上のリスト項目をタップすると、1秒未満で次々と1つのタップ項目がタップされ、最初の呼び出しだけが実行され、残りの呼び出しは無視されます。

また、set/setexactメソッドはvoidを返しますので、メソッドが呼び出され、アラームが設定されていればデバッグできません。今のところ私はadbシェルのdumpsysアラーム毎回確認する必要があります。

誰かが毎回アラームが発生するようにアラームをスケジュールする方法を教えても、方法が頻繁に呼び出されたり、正しい方向に案内されたりしても、大きな助けになります。 :)

答えて

1

まず、このコードをLollipopと上記のSamsungデバイスに使用することを前提としています。この場合、私は同じ問題があり、多くの検索と回避策の後に、Lollipop以上のSamsung DevicesのSmart Managerが問題になると考えました。このコンポーネントは、Alarm Managerが遅くなるのを遅らせることができます.3分後に起動します。モバイルがバッテリーで動作していて、画面が閉じている場合は、アラームマネージャがうまく動作します。もちろん、特定のアプリのSmart Managerを無効にすることもできます。

    デバイス
  1. タップバッテリー
  2. タップアプリケーションの最適化
  3. リスト項目
  4. タップアプリケーションの最適化の詳細
  5. 起動サムスンスマートManagerアプリケーション
  6. 「のために無効」にアプリを選択して下さい

私の場合、それは動作しませんでしたし、スマートマネージャーはLollipopで2台のSamsungデバイスで作業しました。私のアプリケーションパッケージの名前をリファクタリングして文字列 "alert"や "alarm"(例えばcom.example.alarm.myApplication)を含むようにSmart Managerを "欺く"ことができました。詳細については、linkを参照することもできます。

+0

実際、この問題はデバイス固有ではありません。私は多くのデバイスでこのアプリをテストしたが、まだこのバグに直面している。そして、私が説明したユースケースについては、アラームはまったく起動しません。 –

+0

ok、あなたは別のバグを持っているかもしれませんが、あなたが私が説明したバグに直面するでしょう。また、より多くのコードを添付することができます。 – Vasilisfoo

関連する問題