Conoscere nel dettaglio i percorsi delle Directory di memorizzazione (nuove e vecchie versioni di Android) ci evita di cadere in errori di memorizzazione quali NO SUCH FILE OR DIRECTORY oppure ERROR 802 e ERROR 908.
- Premessa
- 1. Memorizzazione interna
- 2. Memorizzazione esterna
- Ulteriori informazioni
- 3. Accesso a immagini e suoni
Premessa
Per favore, leggi: Differenza tra Versione del Sistema Operativo e API.
Nei sistemi Android, sono presenti una → Memoria interna e una → Memoria esterna.
1. Memorizzazione Interna
È possibile accedere alla memoria interna solo con un dispositivo rooted.
1.1 Il pacchetto dell’app è salvato in
/data/data/<packageName>/
Per poter eseguire il debug della tua app, AI2 salva le risorse per → Companion sui dispositivi con
- Android ≥ 10 (API ≥ 29):
/storage/emulated/0/Android/data/edu.mit.appinventor.aicompanion3/files/assets/
- Android < 10 :
/storage/emulated/0/Android/data/edu.mit.appinventor.aicompanion3/files/AppInventor/assets/
1.2. La directory privata è
/data/user/0/<packageName>/files/
Questa directory privata può essere utilizzata con il componente File per salvare/leggere il testo (impostando il percorso senza barra). È possibile accedervi solo dalla tua app e viene rimosso automaticamente quando l’app viene disinstallata.
2. Memoria esterna
La directory principale della memoria esterna è:
/storage/emulated/0/ oppure
/sdcard/ oppure
file:///mnt/sdcard/ oppure
file:///storage/emulated/0/
Per accedere alla memoria esterna, è richiesta l’autorizzazione READ_/WRITE_EXTERNAL_STORAGE
.
2.1. ASD – La Directory specifica per l’app
Inoltre, potrebbe esserci una directory specifica dell’app (ASD = Application Specific Directory) che può essere creata con:
- Taifun’s File extension App Inventor Extensions: File | Pura Vida App oppure
- FileTools extension FileTools : Some tools to work with file oppure
- Get the path of → ASD (app-specific dir) & → private data dir (internal storage).
Nota: l’ASD viene creato automaticamente sui dispositivi con API ≥ 29.
Il percorso dell’ASD è:
/storage/emulated/0/Android/data/<packageName>/files/
che si trova nella memoria esterna (privata), ma non richiede le autorizzazioni READ_ / WRITE_EXTERNAL_STORAGE
. L’ASD è accessibile solo dalla tua app e viene automaticamente rimosso quando l’app viene disinstallata.
Vedi il developer reference: https://developer.android.com/reference/android/Manifest.permission.html#READ_EXTERNAL_STORAGE
Un esempio di ASD
Per AI2 (dalla versione nb188) questo è tutto ciò che serve per salvare il file di testo text.txt nell’ASD (o nel mio esempio nella sua sottocartella anyFolder) su tutte le versioni di Android:
2.2. Scheda SD esterna (rimovibile/micro)
Potrebbe esserci anche un’altra memoria esterna: una scheda SD (micro) rimovibile, ad esempio:
/storage/82C3-E96C/
che può essere solo letto (su dispositivi con Android ≥ 4.4 / KitKat, API 19).
Nota: La directory principale della memoria esterna
/storage/emulated/0/
viene visualizzata sul dispositivo come Memoria interna (purtroppo questo è un po’ ambiguo).
Per un confronto tra ambienti di programmazione, leggi la pagina: Storage components.
Quando si targhettizza un dispositivo Android ≥ 10
(Ricordo di leggere la proprietà DefaultFileScope del componente Screen)
https://developer.android.com/training/data-storage
→ Scoped storage
Per offrire agli utenti un maggiore controllo sui propri file e per limitare l’ingombro dei file, le app destinate ad Android 10 (livello API 29) e versioni successive, hanno accesso per impostazione predefinita con ambito all’archiviazione esterna, o archiviazione con ambito. Tali App hanno accesso solo alla directory specifica dell’app sull’archiviazione esterna, nonché a tipi specifici di supporti creati dall’app.
https://developer.android.com/training/data-storage/use-cases
Ulteriori informazioni
Vorrei introdurre questi tre termini fondamentali:
Percorso assoluto │ percorso relativo │ percorso completo
1. Questo percorso è un → percorso assoluto:
/storage/emulated/0/Android/data/packageName/files/
2. Questo percorso è un → percorso relativo:
/Android/data/packageName/files
Alcuni componenti necessitano di un percorso relativo e altri di un percorso assoluto.
3. Inoltre, alcuni componenti o versioni di Android richiedono un → percorso completo:
file:///storage/emulated/0/Android/data/packageName/files/
Consiglio questi termini per distinguere i percorsi, ad esempio:
percorso relativo:
/Download
percorso assoluto:/storage/emulated/0/Download
percorso completo:file:///storage/emulated/0/Download
Riferimenti e Aggiornamenti
- al 13/11/2021 https://community.appinventor.mit.edu/t/save-a-text-file-or-an-image-canvas-in-the-asd-share-it-on-all-android-versions/20821/12
- al 18/7/2019 https://community.appinventor.mit.edu/t/my-app-with-voice-recorder-dont-work/36698/13
- al 17/8/2021 https://community.appinventor.mit.edu/t/reading-files-from-internal-storage/38132
- al 17/8/2021 https://community.appinventor.mit.edu/t/sound-recorder-error-802-and-error-908-permissions-issue-still-persists/40839/5
- al 1/2/20 Sound recorder Error 802: https://community.appinventor.mit.edu/t/sound-recorder-error-802/4363
- al 14/10/2021 Error 802 when recording audio: https://community.appinventor.mit.edu/t/error-802-when-recording-audio/43518/17
- al 16/4/2021 Sound playback and saving error (701 and 703): https://community.appinventor.mit.edu/t/sound-playback-and-saving-error-701-and-703/31159/2
3. Accesso a immagini e suoni
Link: https://appinventor.mit.edu/explore/content/accessing-images-and-sounds
Le applicazioni create con App Inventor possono accedere a sorgenti audio, immagini e video da tre diversi tipi di posizioni:
Risorse dell’applicazione
Le fonti etichettate Media mostrate nella parte del progettista delle risorse dell’applicazione sono incluse nel pacchetto dell’applicazione. Chiunque installi la tua applicazione li avrà, come parte dell’applicazione. Li specifichi anche nel designer, il che è conveniente. Puoi anche specificarli nei programmi con il loro nome di file: basta usare il nome del file senza alcun prefisso speciale. Ad esempio, se disponi di un asset immagine denominato kitty.png, puoi utilizzarlo come immagine: basta impostare la proprietà Picture di un componente immagine sul testo kitty.png. Allo stesso modo è possibile utilizzare i nomi dei file per l’audio (Sound o Player) o video (VideoPlayer).
Le risorse sono le più comode da usare, ma lo spazio per esse è limitato a pochi megabyte, perché devono essere impacchettate con l’applicazione. Sono utili per piccole immagini e brevi selezioni audio. Probabilmente non li useresti per canzoni o video completi.
La scheda SD del telefono
È possibile accedere ai file sulla scheda SD (secure digital) del telefono utilizzando nomi di file che iniziano con /sdcard . Puoi riprodurre un brano sulla tua scheda SD impostando la sorgente di un componente Player su:
/sdcard/Music/Blondie/The Best of Blondie/Heart of Glass.mp3
e avviando il lettore (supponendo, ovviamente, che il file del brano sia sulla scheda SD). Assicurati di specificare il nome completo del file, incluso ‘mp3’.
Il sistema Android include anche un modo alternativo per progettare file SDCard come URL. Qui si prefissa il nome del file con file:///sdcard e si utilizza la ‘codifica URL’ per i caratteri speciali. Ad esempio, uno spazio è ‘%20’. Quindi potresti designare lo stesso file impostando la sorgente del lettore su
file:///sdcard/Music/Blondie/The%20Best%20of%20Blondie/Heart%20of%20Glass.mp3
Tieni presente che ti consigliamo di utilizzare un componente Player per questo, non Sound. Una canzone completa come questa è troppo grande per essere gestita da Sound.
Immagini e video possono essere designati in modo simile.
App Inventor non include (ancora) alcun modo per archiviare ed elencare i file sulla scheda SD. Dovrai utilizzare altre applicazioni o il file manager del telefono Android per questo.
L’uso della scheda SD offre molto più spazio per i media rispetto al tentativo di impacchettare le cose come risorse. Lo svantaggio è che gli utenti non li otterranno automaticamente installando la tua applicazione.
URL e Web
È possibile accedere ai file sul Web utilizzando gli URL, a partire da http:// , ad esempio, impostando la proprietà dell’immagine di un’immagine su
http://www.google.com/images/srpr/nav_logo14.png
e allo stesso modo per musica e video. Assicurati di utilizzare il collegamento che punta al file effettivo, non ai lettori per i file, che è molto più comune sul Web, specialmente per musica e video.
Altri URL di contenuti
Il sistema Android utilizza anche gli URL per accedere a vari luoghi in cui i contenuti multimediali sono archiviati sul telefono. Ad esempio, è possibile accedere alle immagini nella galleria fotografica con nomi di file che iniziano con content://media/external/images/media , come puoi vedere utilizzando ImagePicker ed esaminando il percorso dell’immagine risultante.
Traduzione degli articoli:
- Tutorial e Guide> FAQ> corretto al 12/09/2021
Link: https://community.appinventor.mit.edu/t/some-basics-on-android-storage-system/21556
-
Accessing images and sounds
Link: https://appinventor.mit.edu/explore/content/accessing-images-and-sounds