アプリケーションがメモリにないときにアラームマネージャブロードキャストが一部のデバイスで受信されない(アプリケーショントレイからスワップオフ)。それが動作していないデバイスはAPI 25で動作し、ONE PLUS 3デバイスです。同じことがNexus 6(API 25)でも機能します。アプリケーションがメモリにないときにアラームマネージャのブロードキャストが受信されない(ワンプラス3)
奇妙なことは、システムログでアラームがトリガーされているのがわかります。アラームが消えたら、下のログを見ることができます。ちょうどそのブロードキャストは受け取られません。再び、これは、アプリがメモリにないときにのみ発生します。アプリがメモリに入っていると、ブロードキャストが正しく受信されます。ここで
V/AlarmManager: Triggering alarm #0: 0 when =1508843147121 package=net.IntAppoperation =*walarm*:com.intapp.receivers.NOTIFICATION_ALARM
私はマニフェストでは、アラーム
を設定しています方法です:私はアラームを設定したい場合は、その後
<receiver android:name="com.intapp.receivers.ReminderReceiver"
android:exported="false"
android:enabled="true">
<intent-filter>
<action android:name="com.intapp.receivers.NOTIFICATION_ALARM" />
</intent-filter>
</receiver>
そして:ここ
public static final String ACTION = "com.intapp.receivers.NOTIFICATION_ALARM";
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, ReminderReceiver.class);
intent.setAction(ACTION);
int randomNum = new Random().nextInt(Integer.MAX_VALUE - 1 + 1);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, randomNum, intent, PendingIntent.FLAG_ONE_SHOT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent); // I get time from calendar instance in my function
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);
}
}
は私の実装です受信機の:
public class ReminderReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Receiver called ");
// my implementation
}
}
EDIT:
問題が少し大きいように思えます。私はCALL_STATE
に登録して、着信/着信を聞くことができます。その放送受信機は、アプリがメモリにないときにも発砲しない。さらに、これはAPI25で動作しているSamsungデバイスでも発生します。一部のデバイスでは、この(マニフェストブロードキャストが動作しない)既知の問題がAPI25の既知の問題ですか?