40

sto ottenendo la posizione dell'utente tramiteAndroid Studio - rimuovere eccezione di sicurezza avvertimento

Location location = LocationServices.FusedLocationApi.getLastLocation(
      mGoogleApiClient); 

Questa riga di codice è all'interno di un metodo e prima di chiamare questo metodo mi controlli per le autorizzazioni runtime Android. Solo se l'autorizzazione è disponibile dall'utente, chiamo questo metodo. Il codice funziona perfettamente.

Il problema è che Android Studio mostra ancora un errore su questa linea non riconoscendo che ho già controllato prima di chiamare questa funzione.

Call requires permission which may be rejected by user: code should explicitly check to see if permission is available (with `checkPermission`) or explicitly handle a potential `SecurityException` 

Ora come rimuovere questo avviso? Ho già controllato le autorizzazioni e non voglio controllare di nuovo solo per rimuovere questo avviso. Ho provato ad aggiungere @SuppressWarnings() ma non conosco la stringa esatta per passare a questo. @SuppressWarnings ({"all"}) funziona ma ovviamente non è raccomandato.

Come rimuovere questo avviso?

EDIT 1: Questo è il mio codice esatto -

private void checkPermissions() { 
    if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) 
      == PackageManager.PERMISSION_GRANTED) 
     getLocation(); //Method called if I have permission 
} 

private void getLocation() { 
    //Android studio shows warning at this line. 
    Location location = LocationServices.FusedLocationApi.getLastLocation(
      mGoogleApiClient); 
} 

Ma se metto il controllo delle autorizzazioni all'interno getLocation metodo(), poi l'avvertimento scompare. @SuppressWarnings ({"MissingPermission"}) non ha funzionato.

EDIT 2: ho scoperto che l'unico modo per eliminare l'avviso sono -

Aggiunta di questo commento in cima a quel particolare pezzo di codice -

//noinspection ResourceType 

o l'aggiunta di questo -

@SuppressWarnings({"ResourceType"}) 
+0

Se la risposta modificata qui sotto funziona, contrassegnarla come accettata. – Renascienza

risposta

108

Siete alla ricerca di (aggiornato per migliorare la chiarezza):

@Override 
@SuppressWarnings({"MissingPermission"}) 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    if (LOCATION_REQUEST_CODE == requestCode) { 
     if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

      lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient); 


     } 
} 

Modificato:

La regola pelucchi corretta è MissingPermission, ma sembra che ci sia un bug che smarrire ad alcune persone.

Quindi, prova @SuppressWarnings ({"ResourceType"}), anche.

+2

Non funziona. –

+0

Sei sicuro? Ho aggiornato la mia risposta al miglior chiarimento. Questo codice viene analizzato e compilato sul mio Android Studio (2.0-Preview 7) senza alcun avviso, da gradle o lint. – Renascienza

+0

Hai il permesso dichiarato sul file manifest, giusto? – Renascienza

6

Se stai cercando di ignorare questo avviso niente, è possibile fare questo in linea:

//noinspection MissingPermission 
Location lastLocation = FusedLocationApi.getLastLocation(locationClient); 

o al livello di metodo:

@SuppressWarnings({"MissingPermission"}) 
public void toggleGPS(boolean enableGPS) { 
    ... 
} 
0

è possibile utilizzare Android Studio di ispezione per generare @SuppressWarnings({"MissingPermission"}) Per il tuo metodo o classe

android studio missing permission check