6

If gmaps ha bisogno di questo permesso:marshmallow permesso per 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. dovrei chiedere per ciascuno di essi per l'utente con requestPermissions?
  2. Ho controllato alcune volte e si blocca solo dicendo che l'utente non ha dato permessi per android.permission.ACCESS_FINE_LOCATION ma non per gli altri, perché?

risposta

3

devo chiedere a ciascuno per l'utente con requestPermissions?

In primo luogo quando utilizzare requestPermission?

requestPermission viene chiamato solo dopo checkSelfPermission quando questo metodo non restituisce PERMISSION_GRANTED.

È possibile trovare uno list of permission che Android M richiede durante il runtime. Ognuna di queste autorizzazioni fa parte di un gruppo di autorizzazioni. WRITE_EXTERNAL_PERMISSION è da android.permission-group.STORAGE e ACCESS_COARSE_LOCATION/ACCESS_FINE_LOCATION sono da android.permission-group.LOCATION.

Se l'utente consente l'accesso a un'autorizzazione, ad esempio ACCESS_COARSE_LOCATION, allora Android concederà automaticamente l'accesso a questo gruppo di autorizzazioni -i.e. permission-group.LOCATION -. Quindi, se in seguito lo checkSelfPermission per ACCESS_FINE_LOCATION, dovresti ricevere PackageManager.PERMISSION_GRANTED.

Se si verifica un arresto anomalo dell'app, significa che si è tentato di chiamare, ad esempio LocationServices.FusedLocationApi.requestLocationUpdates prima di richiedere all'utente la posizione del gruppo di autorizzazioni.

Edit:

Non dimenticate che è requestPermissionasincrono. Pertanto, non chiamare un metodo che richiede un'autorizzazione subito dopo requestPermission. Per chiamare un metodo che richiede un'autorizzazione, è necessario eseguire l'override di onRequestPermissionsResult che fornisce un elenco di autorizzazioni e il loro stato, concesso/rifiutato.

+0

bella risposta, grazie! – Caipivara

+0

È inoltre possibile controllare il video del modello Android che ha spiegato il processo https://www.youtube.com/watch?list=PLWz5rJ2EKKc-lJo_RGGXL2Psr8vVCTWjM&v=C8lUdPVSzDk – xiaomi

3

È necessario solo richiedere l'autorizzazione per i gruppi LOCATION e STORAGE. Sono anche abbastanza sicuro che la posizione Fine includa l'autorizzazione per Coarse, quindi non è necessario includere quella riga nel tuo manifest.

+0

cosa intendi per "Posizione fine include l'autorizzazione per Coarse"? Se chiedo un permesso, sarà concesso a tutti nello stesso gruppo? – Caipivara

+3

'ACCESS_COARSE_LOCATION' è per dati di cella mobile e wifi e' ACCESS_FINE_LOCATION' e per dati di cella mobile, wifi e GPS. La posizione così fine "include" la posizione approssimativa. – xiaomi