我正在开发一个Android应用程序并在我的Moto G X1032上进行测试。在没有任何特殊权限的情况下运行5.1 GPE时,我的警报和通知正常工作。
应用程序使用AlarmManager,它将来会设置警报:
Intent intent = new Intent(getActivity(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmMgr = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
alarmMgr.set(AlarmManager.RTC_WAKEUP, reminder.Due.getTime(), pendingIntent);
然后在接收器中,它发出通知:
Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification.Builder builder = new Notification.Builder(context);
builder.setContentTitle("My App")
.setContentText(reminder.Due.toString())
.setContentIntent(pendingIntent)
.setSmallIcon(R.drawable.ic_stat_revise)
.setLights(Color.GREEN, 750, 1400)
.setAutoCancel(true);
Notification notification = builder.build();
notification.defaults |= Notification.DEFAULT_VIBRATE;
notification.defaults |= Notification.DEFAULT_SOUND;
NotificationManager notificationMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationMgr.notify(0, notification);
它工作正常,唤醒手机(只是CPU不屏幕)并发出通常的声音,振动并闪烁灯光,然后我更改了自定义ROM(http://forum.xda-developers.com/showthread.php?t=2780873)并且全部停止工作,而是当我手动唤醒设备时,它现在发出了声音。
因此,在阅读之后,我输入了一个唤醒锁的权限,并像我这样包围了我的代码:
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "myapp");
wakeLock.acquire();
NotificationManager notificationMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notificationMgr.notify(0, notification);
wakeLock.release();
所以现在它在没有手动唤醒的情况下发出声音,但是灯光不会闪烁,而是在看到通知之前一直亮着。
另外,我想知道在没有它的情况下设置闹钟时SET_ALARM权限的目的是什么?如果没有唤醒锁定代码和许可,它为什么现在不工作,为什么灯仍然亮而不是闪烁?是否rom修改了某些东西或者它首先不是标准。