应用程序未在内存中时未收到警报管理器广播(One Plus 3)

时间:2017-10-24 11:12:19

标签: java android broadcastreceiver alarmmanager android-broadcastreceiver

当应用程序不在内存中时,某些设备未收到警报管理器广播(从应用程序托盘中滑出)。它不工作的设备运行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的已知问题吗?

1 个答案:

答案 0 :(得分:0)

我也有OnePlus 3 ......是的,这对我来说也很重要。即使我注册了BootReceiver。我通过卸载并重新安装我的应用程序来修复我的问题。

我建议您在WakeLock中实施Application,以防止该设备杀死您的应用,因此BroadcastReceiver仍然有效。

让我们希望OnePlus将来会做得更好。