为什么我需要WAKE_LOCK和SET_ALARM权限?

时间:2015-04-18 19:29:00

标签: android alarmmanager android-notifications android-permissions android-wake-lock

我正在开发一个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修改了某些东西或者它首先不是标准。

0 个答案:

没有答案