繁体   English   中英

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

[英]Alarm Manager broadcast not received when app is not in memory (One Plus 3)

当应用程序不在内存中(从应用程序托盘中滑出)时,在某些设备中未收到Alarm Manager广播。 无法使用的设备使用API​​ 25运行,并且是ONE PLUS 3设备。 但是在Nexus 6(使用API​​ 25)中也可以使用。

奇怪的是,我可以在系统日志中看到警报正在触发。 当警报响起时,我可以在下面看到日志。 只是没有收到broadCast。 同样,仅当应用程序不在内存中时,才会发生这种情况。 当应用程序在内存中时,可以正确接收广播。

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上运行的Samsung设备上。某些设备上的API 25是否已知此问题(清单广播不起作用)?

我也有一个OnePlus 3 ...是的,这对我也很常见。 即使我注册了BootReceiver 我通过卸载并重新安装应用程序解决了问题。

我建议在您的Application实现WakeLock ,以防止设备杀死您的应用程序,因此BroadcastReceiver保持活动状态。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM