2015-12-07 32 views
57

Quando si aggiungono le autorizzazioni al file manifest, funziona il seguente xml.Impossibile risolvere Manifest.permission.ACCESS_FINE_LOCATION

<permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

Tuttavia, questo xml non funziona.

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

Quale dovrei usare? Se è il primo, perché non dovrebbe funzionare? Come posso ripararlo?

Inoltre, sto ottenendo un Android un'eccezione permessi 6.0 runtime correlate:

java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission. 

Quando provo ad aggiungere l'autorizzazione ad un array di stringhe al fine di verificare il permesso, Android Studio me non può dice risolvere Manifest.permission nel seguente codice:

new String[]{Manifest.permission.ACCESS_FINE_LOCATION} 

perché sarebbe facendo questo? Come posso ripararlo?

risposta

170

Per la prima parte, si dovrebbe usare <uses-permission>according the the Android Devlopers site. Prova ad assicurarti di dichiarare le tue autorizzazioni direttamente con il tag <manifest>, non nel tag <application>. È difficile sapere qual è il tuo problema senza vedere l'intero file manifest. Check out the link I posted above per ulteriori informazioni su come dichiarare le autorizzazioni nel manifest.

In merito al suo problema di autorizzazioni di esecuzione:

con gli usi-permissions non può risolvere questo ..

new String [] {} Manifest.permission.ACCESS_FINE_LOCATION

Perché?

Assicurati di utilizzare android.Manifest anziché my.app.package.Manifest. Un sacco di volte Android Studio si imposterà su quest'ultimo invece del primo.

Così, la vostra nuova riga di codice sarà simile:

new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}; 

Edit: ho riformattato la mia risposta.

Modifica 2: prestare attenzione all'importazione di android.Manifest. È possibile causare problemi se si sta anche importando my.app.package.Manifest. Diverso da quello import android.Manifest è un altro metodo valido per risolvere questo problema.

+0

Utilizzando andorid.Manifest.permission.X invece di Manifest.permission.X risolto questo per me, grazie. – hnilsen

3

se si sta lavorando sulle autorizzazioni dinamici e di alcuna autorizzazione come ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION dando errore "non può risolvere il metodo PERMISSION_NAME" in questo caso scrivere si codifica con il nome permesso e quindi rigenerare il progetto questo sarà rigenerare il file manifest (Manifest.permission)

-2

Quando si digita "Manifest", Android Studio dovrebbe suggerire di scegliere alcune opzioni di Manifest.Dovresti scegliere l'avvio di Android al posto del nome del tuo progetto.

Se si accede al riferimento di Manifest.java e si può trovare che ci sono solo 1-2 righe nella classe "Permission", quindi si fa riferimento alla classe manifest errata.

58

cambiamento questo

Manifest.permission.ACCESS_FINE_LOCATION

in questo

android.Manifest.permission.ACCESS_FINE_LOCATION

+2

Ti spiace spiegare perché è necessario? –

-2

Prova questa:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_SELECT_PICTURE); 
     return; 
    } 
0
if (Build.VERSION.SDK_INT >= 23) { 

      if (checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
        || checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 

       mapView.setMyLocationEnabled(true); 
      } 
     } 
     else 
     { 
      mapView.setMyLocationEnabled(true); 

     } 
0

Prova questa sia prima di partire, assicurati di avere il permesso di accedere ..

try { 
    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
} catch (SecurityException e) { 
    dialogGPS(this.getContext()); // lets the user know there is a problem with the gps 
} 
14

Prova questo! Dal momento che ACCESS_FINE_LOCATION disponibili nel seguente pacchetto in modo da aggiungere:

import android.Manifest; 

+0

questo tipo di soluzione è meglio come commento se non si è sicuri. – jjj

+0

Ne sono sicuro. Funziona bene per me –

+0

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. - [Dalla recensione] (/ recensione/post di bassa qualità/16828127) –

3

Ho avuto un problema simile in cui utilizzato;

ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED 

dove non ha potuto risolvere il simbolo READ_CONTACTS.

Tuttavia sull'utilizzo;

import android.Manifest; 

ha cominciato a riconoscere READ_CONTACT

0

Change

new String[]{Manifest.permission.ACCESS_FINE_LOCATION} 

Per questo

new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION} 

il vostro problema sarà risolto.

+0

Questa sembra essere solo una ripetizione di [questa risposta esistente] (https://stackoverflow.com/a/38083495). – Pang

0
new String[]{Manifest.permission.ACCESS_FINE_LOCATION} 

cambiamento a

android.manifest.permission.ACCESS_FINE_LOCATION 
+0

Ciao Jagrit Vishwakarma, vuoi dire che dovresti rimuovere la 'nuova stringa [] {' parte? – Pang

Problemi correlati