NotificationManager.notify()因SecurityException而失败

时间:2011-07-18 12:53:02

标签: android permissions wakelock android-wake-lock notificationmanager

在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)

3 个答案:

答案 0 :(得分:0)

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

NotificationManagerService source

NotificationPlayer source

答案 1 :(得分:0)

看起来您正在使用服务。也许服务运行时间过长,手机会在发送通知之前重新进入睡眠状态。我假设你正在使用AlarmManager让手机退出睡眠以检查更新?如果是这种情况,您只需要声明WAKE_LOCK权限,如下所示:

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

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

答案 2 :(得分:0)

似乎只是一些固件的问题,目前问题只有魅族。