2016-02-25 88 views
4

我的Android應用程序需要請求位置服務權限。我這樣做有:onRequestPermissionsResult立即返回拒絕的權限

ActivityCompat.requestPermissions(this, new String[]{ 
          Manifest.permission.ACCESS_COARSE_LOCATION}, 
          REQUEST_CODE_ACCESS_COARSE_LOCATION); 

但是,這被稱爲後,立即onRequestPermissionsResult與權限被拒絕立即返回:

@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case REQUEST_CODE_ACCESS_COARSE_LOCATION: { 

     } 
    } 
} 

的許可清單中列出:

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

我也清除緩存以防止用戶以前拒絕任何影響此操作的拒絕。

我期待一個對話框彈出請求用戶授予或拒絕位置服務的權限,但它不顯示。

+0

我也有同樣的問題,但我拼寫正確的權限。這種行爲的任何其他原因? @AndroidDev –

+0

我們還在等待答案... @AndroidDev –

回答

3

變化:

<uses-permission android:name="android.permission.ACCESS_COURSE_LOCATION"/> 

到:

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

的權限爲 「粗」 的位置數據(即,不細粒度),而不是 「課程」 的位置數據(例如,舉辦一些大學課程的地方)。

+0

奇怪的是,我遇到另一個SO帖子,也表明拼寫錯誤,所以我確實檢查了拼寫,但它仍然超過了我。 :-( – AndroidDev

+0

@AndroidDev:可能會更糟糕,你可以拼寫成'COERSE'。:-) – CommonsWare

0
private int PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION = 100; 
private void checkPermission() { 
    if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) 
      != PackageManager.PERMISSION_GRANTED) { 
      requestPermissions(newString[{Manfest.permission.ACCESS_COARSE_LOCATION}, 
        PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION); 
     } else { 
      doShowLocation(); 
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, 
      int[] grantResults) { 
     if (requestCode == PERMISSIONS_REQUEST_ACCESS_COARSE_LOCATION 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      showContacts(); 
    } 
    } 
+0

我正在那樣做。爲了保持簡單,我從文章中刪除了這些內容。但是這個代碼運行在最新版本的棉花糖上。 – AndroidDev

+0

有很多事情要注意,並且還要放置super.onRequestPermissionsResult(requestCode,permissions,grantResults); – suneall01