Dichiarare le autorizzazioni app

Come menzionato nel flusso di lavoro per l'utilizzo delle autorizzazioni, se la tua app richiede autorizzazioni dell'app, devi dichiararle nel file manifest dell'app. Queste dichiarazioni aiutano gli store e gli utenti a comprendere l'insieme di autorizzazioni che la tua app potrebbe richiedere.

La procedura per richiedere un'autorizzazione dipende dal tipo di autorizzazione:

Aggiungi dichiarazione al file manifest dell'app

Per dichiarare un'autorizzazione che la tua app potrebbe richiedere, includi l'elemento <uses-permission> appropriato nel file manifest dell'app. Ad esempio, un'app che deve accedere alla fotocamera ha questa riga in AndroidManifest.xml:

<manifest ...>
    <uses-permission android:name="android.permission.CAMERA"/>
    <application ...>
        ...
    </application>
</manifest>

Dichiara l'hardware come facoltativo

Alcune autorizzazioni, ad esempio CAMERA, consentono alla tua app di accedere a componenti hardware presenti solo su alcuni dispositivi Android. Se la tua app dichiara una di queste autorizzazioni associate all'hardware, valuta se può comunque essere eseguita su un dispositivo privo di hardware. Nella maggior parte dei casi, l'hardware è facoltativo, pertanto è meglio dichiararlo come facoltativo impostando android:required su false nella dichiarazione di <uses-feature>, come mostrato nel seguente snippet di codice proveniente da un file AndroidManifest.xml:

<manifest ...>
    <application>
        ...
    </application>
    <uses-feature android:name="android.hardware.camera"
                  android:required="false" />
<manifest>

Determinare la disponibilità dell'hardware

Se dichiari l'hardware facoltativo, la tua app può essere eseguita su un dispositivo che non lo ha. Per verificare se in un dispositivo è presente un componente hardware specifico, utilizza il metodo hasSystemFeature(), come mostrato nello snippet di codice riportato di seguito. Se l'hardware non è disponibile, disattiva la funzionalità nell'app.

Kotlin

// Check whether your app is running on a device that has a front-facing camera.
if (applicationContext.packageManager.hasSystemFeature(
        PackageManager.FEATURE_CAMERA_FRONT)) {
    // Continue with the part of your app's workflow that requires a
    // front-facing camera.
} else {
    // Gracefully degrade your app experience.
}

Java

// Check whether your app is running on a device that has a front-facing camera.
if (getApplicationContext().getPackageManager().hasSystemFeature(
        PackageManager.FEATURE_CAMERA_FRONT)) {
    // Continue with the part of your app's workflow that requires a
    // front-facing camera.
} else {
    // Gracefully degrade your app experience.
}

Dichiarare le autorizzazioni in base al livello API

Per dichiarare un'autorizzazione solo sui dispositivi che supportano le autorizzazioni di runtime, ovvero i dispositivi che eseguono Android 6.0 (livello API 23) o versioni successive, includi l'elemento <uses-permission-sdk-23> anziché l'elemento <uses-permission>.

Quando utilizzi uno di questi elementi, puoi impostare l'attributo maxSdkVersion per indicare che i dispositivi con una versione di Android successiva al valore specificato non necessitano di una particolare autorizzazione. In questo modo puoi eliminare le autorizzazioni non necessarie, garantendo al contempo la compatibilità con i dispositivi meno recenti.

Ad esempio, la tua app potrebbe mostrare contenuti multimediali, come foto o video, creati dall'utente mentre la utilizzi. In questo caso, non è necessario utilizzare l'autorizzazione READ_EXTERNAL_STORAGE sui dispositivi con Android 10 (livello API 29) o versioni successive, purché l'app abbia come target Android 10 o versioni successive. Tuttavia, per garantire la compatibilità con dispositivi meno recenti, puoi dichiarare l'autorizzazione READ_EXTERNAL_STORAGE e impostare android:maxSdkVersion su 28.