我在我的应用中使用此权限,并在所有设备和Marhshmallow 6.0
设备中正常工作。
不需要WAKE_LOCK
权限运行时因为它的正常权限,但在Nougat 7.0
设备中出现问题。
应用程序崩溃并在"java.lang.SecurityException: Neither user 10799 nor current process has android.permission.WAKE_LOCK"
行{}发生错误
如何解决这个问题?
答案 0 :(得分:3)
使用
<uses-permission android:name="android.permission.WAKE_LOCK" />
仅限,无需额外代码。 调用 acquire()获取唤醒锁定并强制设备保持在创建唤醒锁定时请求的级别。
完成后调用 release(),不再需要锁定。尽快这样做是非常重要的,以避免过度耗尽设备的电池。
在清单末尾添加所有使用权限
答案 1 :(得分:1)
找到解决方案
据我所知,这在Manifest文件中已经足够了
<uses-permission android:name="android.permission.WAKE_LOCK"/>
对于屏幕连续ON写入逻辑
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
答案 2 :(得分:-1)
您在运行时要求获得许可:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& ContextCompat.checkSelfPermission(this, Manifest.permission.WAKE_LOCK) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WAKE_LOCK},
REQUEST_PERMISSION);
}
@Override
public void onRequestPermissionsResult(final int requestCode, @NonNull final String[] permissions, @NonNull final int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission granted.
} else {
// User refused to grant permission.
}
}
}