[英]Security Exception requesting PARTIAL_WAKE_LOCK
I wrote a library which starts a STICKY Service
when the main application calls a specific method. 我编写了一个库,该库在主应用程序调用特定方法时启动STICKY
Service
。 This Service acquires a PowerManager.PARTIAL_WAKE_LOCK
during the execution of the onStartCommand()
method: 该服务在执行
onStartCommand()
方法期间获取PowerManager.PARTIAL_WAKE_LOCK
:
PowerManager powerManager = (PowerManager)getSystemService(POWER_SERVICE);
if(powerManager != null) {
wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getName());
wakeLock.acquire();
}
and the main application requires the WAKE_LOCK
permission in its AndroidManifest.xml
: 并且主应用程序需要在其
AndroidManifest.xml
中具有WAKE_LOCK
权限:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="it.mcampana.myapp">
<application
....>
<activity android:name=".SplashScreen" android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" /
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
some activities...
</application>
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission
android:name="android.permission.PACKAGE_USAGE_STATS"
tools:ignore="ProtectedPermissions" />
</manifest>
(yes, there are a lot of permissions....but I need them!). (是的,有很多权限。...但是我需要它们!)。
However, with some devices (eg, samsung SM-G950F, or ASUS_Z017D) I receive from ACRA the following exception 但是,对于某些设备(例如,三星SM-G950F或ASUS_Z017D),我从ACRA收到以下异常
java.lang.SecurityException: Neither user 10182 nor current process has android.permission.WAKE_LOCK.
at the exact point where the Service requires the PARTIAL_WAKE_LOCK
. 在服务需要
PARTIAL_WAKE_LOCK
的确切位置。 The strange thing is that with other devices (eg, Xiaomi Mi 5, or Nexus 5) everything works fine. 奇怪的是,使用其他设备(例如小米Mi 5或Nexus 5),一切正常。
**UPDATE: ** I found that this and other problems related to "missing permissions" (also with missing ACCESS_COARSE_LOCATION and READ_CALENDAR) mainly come from Samsung devices. **更新:**我发现与“缺少权限”有关的此问题和其他问题(也缺少ACCESS_COARSE_LOCATION和READ_CALENDAR)主要来自三星设备。 As far as you know, there are some restrictions or additional security policies on Samsung devices?
据您所知,三星设备上有一些限制或其他安全策略吗?
In which API version are you testing? 您正在测试哪个API版本? In API 26 and newer you should ask user for permissions during the runtime
在API 26及更高版本中,您应该在运行时向用户询问权限
ActivityCompat.requestPermissions(getContext(), new String[]{Manifest.permission.WAKE_LOCK},1);
then override onRequestPermissionsResult method to get the user response. 然后重写onRequestPermissionsResult方法以获取用户响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.