![](/img/trans.png)
[英]java.lang.SecurityException: “passive” location provider requires ACCESS_FINE_LOCATION permission on API level 26
[英]Caused by: java.lang.SecurityException: “passive” location provider requires ACCESS_FINE_LOCATION permission
我看過其他出現此錯誤的帖子,一個解決方案是他們拼寫錯誤的“權限”,並且我在此帖子中並入了另一個解決方案,雖然它使我的應用程序不崩潰,但導致它退出,因為我沒有被授予權限。
這是我的清單:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.turtl.decider">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.hardware.location.gps"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
為了安全起見,我同時添加了精確位置和粗略位置權限。
這是導致錯誤的代碼:
private void getLocation() throws SecurityException {
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (isPermissionGranted("ACCESS_FINE_LOCATION",context)) {
loc = locationManager.getLastKnownLocation(locationProvider);
} else {
showAlert("Insufficent Permissions", "Please grant this app GPS permissions to continue.");
}
}
我從鏈接到的解決方案中復制的代碼:
public static boolean isPermissionGranted(String permission, Context c) {
//int res = ContextCompat.checkSelfPermission(context, permission);
return (ContextCompat.checkSelfPermission(c, permission) == PackageManager.PERMISSION_GRANTED);
}
我在Nexus 6p模擬器上使用的是Android API級別24。 就像我說的那樣,檢查是否已授予權限會導致應用程序不崩潰,因為它跳過了這一行,但是它剛剛退出。
我在我的個人設備(API 23)上運行了它,結果相同。 任何幫助表示贊賞。
錯誤#1: isPermissionGranted("ACCESS_FINE_LOCATION",context)
不正確,因為這不是正確的字符串。 使用isPermissionGranted(Manifest.permission.ACCESS_FINE_LOCATION, context)
提取適當的字符串。
錯誤#2: <uses-permission android:name="android.hardware.location.gps"/>
應該是<uses-feature android:name="android.hardware.location.gps"/>
,因為沒有權限盡管該名稱具有硬件功能。
此外,由於您的應用程序不保存Manifest.permission.ACCESS_FINE_LOCATION
,您最終將需要調用requestPermissions()
來請求Manifest.permission.ACCESS_FINE_LOCATION
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.