在Android 8 Oreo上无法获取WAKE_LOCK权限

6

我的应用程序在AndroidManifest.xml中添加了<uses-permission android:name="android.permission.WAKE_LOCK" />。然而,在Oreo设备上,调用获取锁PowerManager.PARTIAL_WAKE_LOCK会导致应用程序崩溃。

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: java.lang.SecurityException: Neither user 10094 nor current process has android.permission.WAKE_LOCK.

请问您能否发布您遇到的任何错误和异常? - PrashanD
Android O在wakelocks、广播和后台服务方面有巨大的行为变化。 - Pawel
@Pawel,WAKE_LOCK是一项普通权限,因此出现问题是不正常的。 - exploitr
1个回答

24

您的应用程序可能正在使用新版本的ACRA库。 在新版本中,他们在lib AndroidManifest.xml文件中添加了<uses-permission android:name="android.permission.WAKE_LOCK" android:maxSdkVersion="25" /> 。 因此android:maxSdkVersion="25"会悄悄地合并到主应用程序AndroidManifest.xml文件中,因此该应用程序在Oreo设备上没有WAKE_LOCK权限。 解决方案是在您的uses-permission声明中添加tools:node="replace"

例如:<uses-permission android:name="android.permission.WAKE_LOCK" tools:node="replace" />

更新:在ACRA库的最近版本中,这个不幸的“特性”已经被移除


2
我已经浪费了两天时间在这上面,如果这是正确答案,你就是神了! - Meisam
2
是的,这是正确答案,现在你正式成为了神。 :D - Meisam
1
我的问题也因为这个答案得到了解决,谢谢 Greg Dan。 - Tayyab Amin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接