簡體   English   中英

由以下原因引起:java.lang.SecurityException:“被動”位置提供者需要ACCESS_FINE_LOCATION權限

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM