当应用程序不在内存中时,某些设备未收到警报管理器广播(从应用程序托盘中滑出)。它不工作的设备运行API 25并且是ONE PLUS 3设备。但是在Nexus 6中使用同样的东西(使用API 25)。
奇怪的是,我可以在系统日志中看到警报正在被触发。当警报响起时,我可以看到下面的日志。只是没有收到broadCast。再次,只有当app不在内存中时才会发生这种情况。当应用程序在内存中时,正确接收广播。
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);
}
}
这是我对Receiver的实现:
public class ReminderReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Receiver called ");
// my implementation
}
}
编辑:
似乎问题有点大。我还注册了CALL_STATE
,我可以通过它来收听来电/去电。当应用程序不在内存中时,该广播接收器也不会触发。另外,这种情况发生在三星设备上,也是在API 25上运行的。在某些设备上,这是(Manifest广播无效)API 25的已知问题吗?
答案 0 :(得分:0)
我也有OnePlus 3 ......是的,这对我来说也很重要。即使我注册了BootReceiver
。我通过卸载并重新安装我的应用程序来修复我的问题。
我建议您在WakeLock
中实施Application
,以防止该设备杀死您的应用,因此BroadcastReceiver
仍然有效。
让我们希望OnePlus将来会做得更好。