Risoluzione Problemi Camera su Ionic e Cordova con Android 13 Api Level 33: Guida Passo-Passo
Recentemente, mi sono imbattuto in una sfida apparentemente semplice che, a causa di incompatibilità di versione e recenti aggiornamenti su Android, ha finito per consumare un’intera mattinata. Questa esperienza mi ha motivato a condividere alcuni suggerimenti cruciali per risparmiare tempo prezioso, tempo che potrebbe essere altrimenti impiegato in attività più produttive. Se vi trovate a lavorare su un’app che necessita dell’accesso alla fotocamera del dispositivo e vi state scontrando con le nuove politiche di permessi di Android, che richiedono una richiesta in tempo reale, ma senza successo, vi invito a seguire i passaggi che ho delineato di seguito.
Per superare le difficoltà legate all’utilizzo della fotocamera in un’app Ionic con Cordova per API livello 33 (Android 13), ecco una guida passo-passo:
Configurazione dell’ambiente:
ionic --version 7.2.0 nvm current v18.19.0 gradle --version ------------------------------------------------------------ Gradle 7.4.2 ------------------------------------------------------------ Build time: 2022-03-31 15:25:29 UTC Revision: 540473b8118064efcc264694cbcaa4b677f61041 Kotlin: 1.5.31 Groovy: 3.0.9 Ant: Apache Ant(TM) version 1.10.11 compiled on July 10 2021 JVM: 17.0.10 (Eclipse Adoptium 17.0.10+7) OS: Windows 11 10.0 amd64 javac -version javac 17.0.10 node --version v18.19.0 cordova --version 12.0.0 (cordova-lib@12.0.1)
1. Aggiornamento del Plugin della Camera
Apri il terminale nel tuo progetto e esegui il comando per rimuovere la versione corrente del plugin della camera:
$ionic cordova plugin remove cordova-plugin-camera
Installa l’ultima versione del plugin della camera:
$ionic cordova plugin add cordova-plugin-camera@latest
Aggiungi anche il plugin per i permessi di runtime, se non è già incluso nel tuo progetto:
$ionic cordova plugin add cordova-plugin-android-permissions@latest
2. Verifica delle Impostazioni di Configurazione
Modifica il file config.xml nel tuo progetto per assicurarti che non ci siano restrizioni sulla versione massima del SDK. Rimuovi o aggiorna qualsiasi riferimento a android-maxSdkVersion per assicurarti che l’app sia compatibile con Android 13. Nel mio caso ho lasciato solo questa preference:
<preference name="android-targetSdkVersion" value="33" />
3. Aggiornamento di Cordova-Android
Verifica la versione attuale di Cordova-Android nel tuo progetto con:
$ionic cordova platform ls
Aggiorna Cordova-Android alla versione che supporta Android 13, se necessario. Al momento della mia ultima conoscenza, dovresti mirare almeno alla versione 10.x di Cordova-Android:
$ionic cordova platform remove android $ionic cordova platform add android@latest
Assicurati di controllare la documentazione ufficiale di Cordova per la versione specifica compatibile con Android 13.
4. Controllo dei Permessi
Aggiungi il codice per la richiesta dei permessi a runtime nel tuo progetto, seguendo le linee guida ufficiali di Android e Cordova. Questo è particolarmente importante per Android 13, che ha politiche di permessi più stringenti.
Un esempio di richiesta dei permessi in Ionic/Cordova potrebbe essere:
document.addEventListener('deviceready', function () { var permissions = cordova.plugins.permissions; permissions.requestPermission(permissions.CAMERA, successCallback, errorCallback); function successCallback() { console.log('Camera permission granted'); } function errorCallback() { console.log('Camera permission denied'); } }, false);
5. Inserisci la configurazione per indirizzare i permessi su AndroidManifest.xml
Nel config.xml inserire nella sezione platform android la seguente configurazione:
<platform name="android"> .... <config-file mode="merge" parent="/*" target="AndroidManifest.xml"> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> </config-file> ...
ed aggiungere nella configurazione del widget in testa al file config.xml la seguente direttiva:
<widget ... xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
6. Test su Dispositivo Reale
Esegui l’app sul dispositivo. Dopo aver apportato tutte le modifiche, testa l’app su un dispositivo reale con Android 13 per assicurarti che la camera funzioni correttamente.
ionic cordova run android --device
Questi passaggi dovrebbero aiutarti a risolvere il problema con la camera in Ionic su Android 13. Tuttavia, se incontri ancora difficoltà, considera di controllare i forum di sviluppo come Stack Overflow o i canali ufficiali di supporto di Ionic e Cordova per soluzioni specifiche o problemi noti.
Inoltre, come già menzionato, se continui a riscontrare problemi con Cordova, potresti valutare di migrare il tuo progetto a Capacitor, che offre un’approccio più moderno e integrato per incorporare funzionalità native nelle app Ionic
P.S.
Vi lascio anche un esempio per lo start video da usare nel codice angular/ionic
startVideo() { const facingMode = 'environment'; // Use the rear camera const constraints = { video: { facingMode: facingMode, width: { exact: window.innerWidth } }, audio: false }; navigator.mediaDevices.getUserMedia(constraints) .then(stream => { this.videoElement.nativeElement.srcObject = stream; }) .catch(err => { console.error("Error accessing the webcam", err); }); }
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.
Comments