1

Android 2.2何时NotificationManager.notify()需要WAKE_LOCK权限?

我从一位用户那里收到了以下堆栈跟踪:

java.lang.SecurityException: Neither user ***** nor current process has android.permission.WAKE_LOCK.
  at android.os.Parcel.readException(Parcel.java:1247)
  at android.os.Parcel.readException(Parcel.java:1235)
  at android.app.INotificationManager$Stub$Proxy.enqueueNotificationWithTag(INotificationManager.java:274)
  at android.app.NotificationManager.notify(NotificationManager.java:118)
  at android.app.NotificationManager.notify(NotificationManager.java:94)
  ...

更新Scala中的调用代码:

  notification = new Notification(android.R.drawable.stat_notify_sync,
    "%s %s".format(statusTitle, finishedStatus), 0)
  notification.flags = Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL
  notification.setLatestEventInfo(SyncService.this, statusTitle, finishedStatus,
    PendingIntent.getActivity(SyncService.this, 0, new Intent(SyncService.this, classOf[MainActivity]), 0))
  notificationManager.notify(NOTIFICATION, notification)
4

3 回答 3

0

看起来好像您正在使用服务。可能服务运行时间过长,手机在发送通知之前就重新进入睡眠状态。我假设您正在使用 AlarmManager 使手机进入睡眠状态以检查更新?如果是这种情况,您只需要WAKE_LOCK像这样声明权限:

<uses-permission android:name="android.permission.WAKE_LOCK" />

我以前遇到过这个问题,尤其是在从 Internet 上的服务更新时。我找到的唯一解决方案是声明WAKE_LOCK权限。

于 2011-07-18T16:34:48.883 回答
0

似乎通知播放器在播放声音时尝试获取唤醒锁定。

NotificationManager服务源

NotificationPlayer 源

于 2011-07-18T13:16:49.687 回答
0

貌似只是部分固件的问题,目前只有魅族有问题。

于 2012-05-17T08:06:23.260 回答