Impostazioni Android

Nella piattaforma Android, potete usare l'elemento android del descrittore dell'applicazione per aggiungere informazioni al file manifest dell'applicazione Android, che è un file di proprietà dell'applicazione utilizzato dal sistema operativo Android. ADT genera automaticamente il file Android Manifest.xml quando create il pacchetto APK. AIR imposta alcune proprietà sui valori richiesti per garantire il funzionamento di determinate funzioni. Eventuali altre proprietà impostate nella sezione android del descrittore dell'applicazione AIR vengono aggiunte alla sezione corrispondente del file Manifest.xml.

Nota: per la maggior parte delle applicazioni AIR, dovete impostare le autorizzazioni Android necessarie per l'applicazione nell'elemento android , ma in genere non occorre impostare altre proprietà.

Potete impostare solo gli attributi che accettano stringhe, numeri interi o valori booleani. L'impostazione di riferimenti a risorse interne al pacchetto dell'applicazione non è supportata.

Nota: Il runtime richiede una versione SDK minima uguale o maggiore di 14. Se desiderate creare un'applicazione solo per versioni successive, assicuratevi che il file manifest includa <uses-sdk android:minSdkVersion=""></uses-sdk> con la versione corretta.

Impostazioni Android manifest riservate

AIR imposta varie voci del file manifest nel documento Android manifest generato, al fine di garantire che le funzioni dell'applicazione e del runtime funzionino correttamente. Non è possibile definire le seguenti impostazioni:

Elemento manifest

Non è possibile impostare gli attributi seguenti dell'elemento manifest:

  • package

  • android:versionCode

  • android:versionName

  • xmlns:android

Elemento activity

Non è possibile impostare gli attributi seguenti dell'elemento activity principale:

  • android:label

  • android:icon

Elemento application

Non è possibile impostare gli attributi seguenti dell'elemento application:

  • android:theme

  • android:name

  • android:label

  • android:windowSoftInputMode

  • android:configChanges

  • android:screenOrientation

  • android:launchMode

Autorizzazioni Android

Il modello di sicurezza Android richiede che ogni applicazione richiede l'autorizzazione prima di utilizzare funzioni che hanno un impatto sulla sicurezza o sulla privacy. Queste autorizzazioni devono essere specificate quando si crea il pacchetto dell'applicazione e non possono essere modificate in fase di runtime. Quando un utente installa un'applicazione, il sistema operativo Android segnala quali autorizzazioni sono richieste per tale applicazione. Se un'autorizzazione necessaria per una particolare funzione non viene richiesta, il sistema operativo Android potrebbe generare un'eccezione quando l'applicazione tenta di accedere a tale funzione, ma non è sicuro che ciò avvenga. Le eccezioni vengono trasmesse dal runtime all'applicazione. In caso di esito negativo senza eccezione, un messaggio di mancata autorizzazione viene aggiunto al registro di sistema Android.

In AIR, le autorizzazioni Android vengono specificate nell'elemento android del descrittore dell'applicazione. Le autorizzazioni vanno aggiunte nel formato seguente (PERMISSION_NAME è il nome di un'autorizzazione Android).

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.PERMISSION_NAME" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Le istruzioni uses-permissions all'interno dell'elemento manifest vengono aggiunte direttamente al documento Android manifest.

Le seguenti autorizzazioni sono richieste per l'uso di varie funzioni AIR:

ACCESS_COARSE_LOCATION
Consente all'applicazione di accedere ai dati di posizione della rete WiFi e cellulare tramite la classe Geolocation.

ACCESS_FINE_LOCATION
Consente all'applicazione di accedere ai dati GPS tramite la classe Geolocation.

ACCESS_NETWORK_STATE e ACCESS_WIFI_STATE
Consente all'applicazione di accedere alle informazioni di rete tramite la classe NetworkInfo.

CAMERA
Consente all'applicazione di accedere alla fotocamera.
Nota: quando chiedete l'autorizzazione a utilizzare la funzione fotocamera, Android presume che anche l'applicazione richieda l'uso della fotocamera. Se la fotocamera è una funzione opzionale dell'applicazione, dovete aggiungere un elemento uses-feature al file manifest per la fotocamera, impostando l'attributo richiesto su false . Vedete Filtro di compatibilità Android .

INTERNET
Consente all'applicazione di effettuare richieste di rete e di eseguire il debug remoto.

READ_PHONE_STATE
Consente al runtime AIR di disattivare l'audio durante le chiamate telefoniche. Dovete impostare questa autorizzazione se l'applicazione riproduce l'audio quando è in background.

RECORD_AUDIO
Consente all'applicazione di accedere al microfono.

WAKE_LOCK e DISABLE_KEYGUARD
Consente all'applicazione di impedire che il dispositivo entri in modalità sleep utilizzando le impostazioni della classe SystemIdleMode.

WRITE_EXTERNAL_STORAGE
Consente all'applicazione di scrivere sulla scheda di memoria esterna del dispositivo.

Ad esempio, per impostare le autorizzazioni per un'applicazione che richiede ogni tipo di autorizzazione, potreste aggiungere il codice seguente al descrittore dell'applicazione:

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
                            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
                            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
                            <uses-permission android:name="android.permission.CAMERA" /> 
                            <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> 
                            <uses-permission android:name="android.permission.INTERNET" /> 
                            <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
                            <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                            <uses-permission android:name="android.permission.WAKE_LOCK" /> 
                            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Schemi URI personalizzati per Android

Potete usare uno schema URI personalizzato per avviare un'applicazione AIR da una pagina Web o un'applicazione Android nativa. Il supporto degli URI personalizzati dipende dai filtri di intento specificati nel file manifest di Android, quindi non è possibile sfruttare questa tecnica su altre piattaforme.

Per utilizzare un URI personalizzato, aggiungete una voce intent-filter al descrittore dell'applicazione all'interno del blocco <android> . Nell'esempio seguente, entrambi gli elementi intent-filter devono essere specificati. Modificate l'istruzione <data android:scheme=" my-customuri "/> in modo che corrisponda alla stringa URI del vostro schema personalizzato.

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application> 
                            <activity> 
                            <intent-filter> 
                            <action android:name="android.intent.action.MAIN"/> 
                            <category android:name="android.intent.category.LAUNCHER"/> 
                            </intent-filter> 
                            <intent-filter> 
                            <action android:name="android.intent.action.VIEW"/> 
                            <category android:name="android.intent.category.BROWSABLE"/> 
                            <category android:name="android.intent.category.DEFAULT"/> 
                            <data android:scheme="my-customuri"/> 
                            </intent-filter> 
                            </activity> 
                            </application> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Un filtro di intento indica al sistema operativo Android che l'applicazione è disponibile per l'esecuzione di una determinata azione. Nel caso di un URI personalizzato, questo significa che l'utente ha fatto clic su un collegamento che utilizza quello schema URI (e il browser non sa come gestirlo).

Quando l'applicazione viene attivata da un URI personalizzato, l'oggetto NativeApplication invia un evento invoke . L'URL del collegamento, inclusi i parametri di query, viene inserito nell'array arguments dell'oggetto InvokeEvent. Potete usare un numero illimitato di elementi intent-filter.

Nota: i collegamenti in un'istanza StageWebView non possono aprire URL che impiegano schemi URI personalizzati.

Filtro di compatibilità Android

Il sistema operativo Android usa vari elementi nel file manifest di un'applicazione per determinare se l'applicazione è compatibile con un particolare dispositivo. L'aggiunta di queste informazioni al file manifest è opzionale. Se non includete questi elementi, l'applicazione può essere installata su qualsiasi dispositivo Android. Tuttavia, non vi è garanzia che possa funzionare correttamente su qualunque dispositivo Android. Ad esempio, un'applicazione per fotocamera non sarà molto utile su un telefono che non dispose di una fotocamera.

I tag manifest Android che potete usare per filtrare sono:

  • supports-screens

  • uses-configuration

  • uses-feature

  • uses-sdk (in AIR 3+)

Applicazioni per fotocamera

Se richiedete l'autorizzazione camera per l'applicazione, Android presuppone che l'applicazione necessiti di tutte le funzioni della fotocamera disponibili, incluso la messa a fuoco automatica e il flash. Se l'applicazione non richiede tutte le funzioni della fotocamera, oppure se la fotocamera è una funzione opzionale, dovreste impostare i vari elementi uses-feature della fotocamera in modo da indicare che sono opzionali. In caso contrario, gli utenti con dispositivi in cui manca una particolare funzione o che non dispongono di una fotocamera, non saranno in grado di trovare la vostra applicazione in Android Market.

L'esempio seguente illustra come richiedere l'autorizzazione per la fotocamera e rendere opzionali tutte le funzioni della fotocamera:

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.CAMERA" /> 
                                <uses-feature android:name="android.hardware.camera" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/> 
                                <uses-feature android:name="android.hardware.camera.flash" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

Applicazioni di registrazione audio

Se richiedete l'autorizzazione per la registrazione audio, Android presume anche che l'applicazione necessiti di un microfono. Se la registrazione audio è una funzione opzionale dell'applicazione, potete aggiungere un tag uses-feature per specificare che il microfono non è richiesto. In caso contrario, gli utenti con dispositivi privi di microfono non saranno in grado di trovare la vostra applicazione in Android Market.

L'esempio seguente illustra come richiedere l'autorizzazione per l'uso del microfono mantenendo comunque opzionale la presenza di un microfono hardware:

<android> 
                                <manifestAdditions> 
                                <![CDATA[ 
                                <manifest> 
                                <uses-permission android:name="android.permission.RECORD_AUDIO" /> 
                                <uses-feature android:name="android.hardware.microphone" android:required="false"/> 
                                </manifest> 
                                ]]> 
                                </manifestAdditions> 
                                </android>

Posizione di installazione

Potete consentire che l'applicazione venga installata o spostata sulla scheda di memoria esterna impostando l'attributo installLocation dell'elemento Android manifest su auto oppure su preferExternal :

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest android:installLocation="preferExternal"/> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Il sistema operativo Android non garantisce che l'applicazione sarà installata sulla memoria esterna. Un utente può anche spostare l'applicazione tra la memoria interna e quella esterna utilizzando le impostazioni del sistema.

Anche quando un'applicazione è installata nella memoria esterna, la cache e i dati utente dell'applicazione, quali il contenuto della directory app-storage, gli oggetti condivisi e i file temporanei vengono comunque salvati nella memoria interna. Per evitare di usare una quantità eccessiva di memoria interna, siate selettivi nella scelta dei dati da salvare nella directory di archiviazione dell'applicazione. Eventuali grandi quantità di dati vanno salvate sulla scheda SD utilizzando la posizione File.userDirectory o File.documentsDirectory (entrambe sono mappate alla directory principale della scheda SD in Android).

Abilitazione di Flash Player e altri plug-in in un oggetto StageWebView

In Android 3.0+, un'applicazione deve abilitare l'accelerazione hardware nell'elemento Android application per consentire la visualizzazione del contenuto plug-in in un oggetto StageWebView. Per abilitare il rendering tramite plugin, impostate l'attributo android:hardwareAccelerated dell'elemento application su true :

<android> 
                            <manifestAdditions> 
                            <![CDATA[ 
                            <manifest> 
                            <application android:hardwareAccelerated="true"/> 
                            </manifest> 
                            ]]> 
                            </manifestAdditions> 
                            </android>

Profondità del colore

In AIR 3 e versioni successive, il runtime imposta la visualizzazione per il rendering con colori a 32 bit. Nelle versioni precedenti di AIR, il runtime usa il colore a 16 bit. Potete istruire il runtime a utilizzare il colore a 16 bit mediante l'elemento <colorDepth> del descrittore dell'applicazione:

<android> 
                            <colorDepth>16bit</colorDepth> 
                            <manifestAdditions>...</manifestAdditions> 
                            </android>

L'uso della profondità colore a 16 bit può migliorare le prestazioni di rendering, ma con una riduzione della fedeltà dei colori.