2016-06-13 90 views
0

我正在嘗試獲取用戶的最後一個位置。爲此,我已經在manifest xml文件中聲明瞭以下權限。清單中未識別權限聲明

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

但在這個代碼,它不斷出現以下錯誤:

Code should explicitly check to see if permission is available.

我沒有看到這一點,但我無論如何增加了以下檢查。

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     return; 
    } 

這會阻止顯示錯誤,但是當我運行應用程序時,它最終返回。我缺少什麼許可?過了一段時間,因爲我在Android上工作,我不記得要處理這些額外的檢查。明確的許可聲明已足夠。請諮詢我缺少的東西。

代碼:

LocationManager locationManager; 
String provider; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    provider = locationManager.getBestProvider(new Criteria(), false); 
    Location location = null; 

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED 
      && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     Log.i("location", "returned"); // This log will occur 
     return; //return will occur 
    } 
    location = locationManager.getLastKnownLocation(provider); //this is the line that requires permission 

    Log.i("location", "This log will not occur"); 
} 
+0

你運行什麼android版本。請注意,在Android 6中更改權限,請閱讀文檔。 – Olayinka

+0

@Olayinka我目前使用API​​ 23. – JasSy

回答

3

在安卓6.0,擅自批准並獲得改變。在清單中添加權限不再保證訪問權限。用戶現在有權在他選擇時撤銷和授予您權限。

您需要明確從用戶請求一些權限。用戶可以選擇授予您許可權,然後繼續工作。用戶也可以選擇拒絕該請求,然後您必須弄清楚如何處理這種情況。

授予的權限不是最終的。用戶仍然可以在將來晚些時候撤消權限,因此您必須記錄您的權限。如果權限對於應用程序的性能至關重要,請幫助用戶瞭解,在請求權限時,權限對於應用程序正常工作(通過使用對話框/彈出窗口)是必不可少的。

爲了更好地理解read this

你做了什麼檢查,如果你有必要的權限。 而不是突破的方法,request for the permission

+0

即使在那時,我已經添加了權限檢查。在我的模擬器上,系統沒有要求明確許可的迴應。嘗試在實際的設備和相同的問題。將看看你的鏈接。 – JasSy

+0

@JasSy請按照答案中的鏈接閱讀文檔。 – Olayinka