6

如果gmaps需要這個權限:棉花糖權限gmaps

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
  1. 我應該向每一個用戶與requestPermissions
  2. 我檢查了一些時間,它只是崩潰說,用戶沒有給予android.permission.ACCESS_FINE_LOCATION但不是其他人的權限,爲什麼?

回答

3

我應該向每個用戶詢問requestPermissions

首先什麼時候使用requestPermission?

requestPermission只有在checkSelfPermission之後調用時,此方法不返回PERMISSION_GRANTED

您可以在運行時找到android M需要的list of permission。每個權限都是權限組的一部分。 WRITE_EXTERNAL_PERMISSION是從android.permission-group.STORAGEACCESS_COARSE_LOCATION/ACCESS_FINE_LOCATION是從android.permission-group.LOCATION

如果用戶允許訪問權限 - 例如ACCESS_COARSE_LOCATION - ,那麼android將自動授予此權限組的訪問權--i.e. permission-group.LOCATION - 。所以如果您以後checkSelfPermissionACCESS_FINE_LOCATION,您應該收到PackageManager.PERMISSION_GRANTED

如果您的應用程序崩潰,這意味着您在向用戶請求權限組位置之前嘗試呼叫,例如LocationServices.FusedLocationApi.requestLocationUpdates

編輯:

不要忘了requestPermission異步。所以不要求在權限之後需要權限的方法。要調用需要權限的方法,您應該覆蓋onRequestPermissionsResult,該權限會爲您提供權限列表及其狀態 - 已拒絕/否決。

+0

很酷的答案謝謝! – Caipivara

+0

您還可以查看解釋流程的android模式視頻https://www.youtube.com/watch?list=PLWz5rJ2EKKc-lJo_RGGXL2Psr8vVCTWjM&v=C8lUdPVSzDk – xiaomi

3

您應該只需要請求LOCATION和STORAGE組的權限。我也很確定精細位置包含粗糙度許可,所以你不需要在清單中包含該行。

+0

你是什麼意思由'精細位置包括粗糙'的權限?如果我問一個許可,那麼它將被授予同一組的所有人? – Caipivara

+3

'ACCESS_COARSE_LOCATION'用於移動小區數據和wifi和'ACCESS_FINE_LOCATION'以及移動小區數據,wifi和GPS。所以精美的位置「包括」粗糙的位置。 – xiaomi