Scheda SD virtuale. Come utilizzare una scheda SD su un dispositivo Android

Durante lo sviluppo di un'applicazione per un concorso, ho riscontrato un problema di archiviazione del database. Il problema era come identificare la scheda di memoria esterna. In generale, una ricerca su Internet non ha dato una risposta esatta. Pertanto, combinando tutti i risultati trovati, ho assemblato la mia classe. Se qualcuno è interessato, guardi sotto il taglio.

Quindi, cominciamo con la teoria.

Terminologia

Google ci dice che esistono i seguenti concetti:
  1. Interno ( interno) la memoria fa parte della memory card incorporata nel telefono. Se utilizzata per impostazione predefinita, la cartella dell'applicazione è protetta dall'accesso da parte di altre applicazioni (utilizzo della memoria interna).
  2. Esterno ( esterno) la memoria è la "memoria esterna" generale, vale a dire può trattarsi di una parte della memoria incorporata o di un dispositivo che può essere rimosso. Di solito fa parte della memoria integrata, l'ultima volta che ho visto un dispositivo rimosso era su Android 2.2, dove la memoria integrata era di circa 2 GB e la memoria connessa è diventata esterna (Utilizzo della memoria esterna).
  3. Eliminato ( rimovibile) memoria - tutto lo spazio di archiviazione che può essere rimosso dal dispositivo senza interventi “chirurgici”.

Prima di KitKat 4.4, l'API non forniva funzionalità per il recupero di percorsi di memoria esterna. A partire da questa versione (API 19), è apparsa la funzione Public Abstract File getExternalFilesDirs(Tipo String), che restituisce un array di stringhe con percorsi alla memoria interna ed esterna. Ma che dire della nostra scheda SD, che viene inserita nello slot? Ancora una volta non riusciamo a trovare il percorso per arrivarci.

Risultati della ricerca

Per rispondere alla domanda mi sono rivolto all’onnisciente Google. Ma neanche lui mi ha dato una risposta chiara. Sono state prese in considerazione molte opzioni di definizione, dall'utilizzo di funzioni standard che portano alla memoria esterna, ma non hanno nulla a che fare con la rimozione dei dispositivi di archiviazione, all'elaborazione delle regole di montaggio dei dispositivi (Android funziona sul kernel Linux). In questi ultimi casi sono stati utilizzati percorsi “cablati” alla cartella con i dispositivi montati (questa directory è diversa nelle diverse versioni). Non dimenticare che le regole di montaggio cambiano da versione a versione.

Alla fine, ho deciso di unire tutte le conoscenze acquisite e di scrivere la mia classe, che può restituire percorsi a dispositivi esterni ed eliminati.

Descrizione del codice

È stata creata una classe MountDevice, che contiene il percorso del dispositivo, il tipo di dispositivo e un hash.
Esistono due tipi di dispositivi (non ho toccato la memoria interna, poiché è possibile accedervi tramite l'API di sistema).

Enumerazione pubblica MountDeviceType ( EXTERNAL_SD_CARD, REMOVABLE_SD_CARD )
E la classe è stata creata StorageHelper, che ricerca le schede di memoria disponibili.

La classe StorageHelper implementa due metodi di ricerca: attraverso l'ambiente di sistema ( Ambiente) e utilizzando l'utilità Linux montare, o meglio il risultato della sua esecuzione.

Metodo uno: Ambiente
Quando lavoro con l'ambiente, utilizzo la funzione standard getExternalStorageDirectory() per ottenere informazioni sulla memoria esterna. Per ottenere informazioni sulla memoria da eliminare, utilizzo la variabile d'ambiente " SECONDARY_STORAGE".

C'è sempre una memoria esterna e di solito esiste sempre, quindi ne controlliamo la leggibilità, calcoliamo l'hash e lo ricordiamo. Potrebbe esserci molta memoria da eliminare, quindi è necessario dividere la stringa risultante per delimitatore e controllare ciascun valore.

funzione fillDevicesEnvirement

Percorso stringa = android.os.Environment.getExternalStorageDirectory() .getAbsolutePath(); if (!path.trim().isEmpty() && android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) ( testAndAdd(path, MountDeviceType.EXTERNAL_SD_CARD); ) // Ottieni il dispositivo di rimozione String rawSecondaryStoragesStr = System.getenv("SECONDARY_STORAGE"); if (rawSecondaryStoragesStr != null && !rawSecondaryStoragesStr.isEmpty()) ( // Tutte le schede SD secondarie vengono divise nell'array final String rawSecondaryStorages = rawSecondaryStoragesStr .split(File.pathSeparator); for (String rawSecondaryStorage: rawSecondaryStorages) ( testAndAdd(rawSecondaryS stoccaggio, MountDeviceType.REMOVABLE_SD_CARD);


La soluzione è stata presa da StackOverflow. La risposta è da qualche parte laggiù.
Metodo due: montare
Dato che per molto tempo non sono riuscito a farmi indicare dal sistema il percorso della memoria da cancellare, ho deciso di guardare nella direzione dei dispositivi montati. Il sistema dispone di file di configurazione che descrivono le regole di montaggio dispositivi esterni. Andrebbe tutto bene, ma su Android versione 4.* i comuni mortali non hanno accesso a questo file, quindi non prenderò in considerazione questo metodo.

Torniamo all'utilità di montaggio. Se eseguito senza parametri, il comando restituisce un elenco di file system montati. I dispositivi da eliminare sono solitamente nel formato file system FAT, quindi evidenzieremo le righe che contengono la caratteristica " grasso". La memoria esterna sarà caratterizzata dal parametro " fusibile".

Nota: quando si utilizza questo metodo, i tipi di dispositivi montati non vengono sempre determinati correttamente (molto probabilmente non ho tenuto conto di qualcosa). Ho notato la differenza su diverse versioni di Android. Pertanto, questo metodo può essere utilizzato come aggiuntivo.

funzione fillDevicesProcess

try ( Runtime runtime = Runtime.getRuntime(); proc = runtime.exec("mount"); prova ( is = proc.getInputStream(); isr = new InputStreamReader(is); br = new BufferedReader(isr); while ( (line = br.readLine()) != null) ( if (line.contains("secure")) continua; if (line.contains("asec")) continua; if (line.contains("fat") ) (// Scheda TF String columns = line.split(" "); if (colonne != null && columns.length > 1) ( testAndAdd(columns, MountDeviceType.REMOVABLE_SD_CARD); ) ) else if (line.contains(" fuse")) (// internal(External) // storage String columns = line.split(" "); if (columns != null && columns.length > 1) ( // mount = mount.concat(columns + " \n"); testAndAdd(colonne, MountDeviceType.EXTERNAL_SD_CARD); ) ) ) ) infine ( ... ) ) catch (Eccezione e) ( ... )

Il codice sorgente dell'intera classe non si trova ancora da nessuna parte. Uno di questi giorni proverò a pubblicarlo su gitHub.

Chi altro usa quali metodi?

Tag: aggiungi tag

Questo strumento ti consente di creare e gestire partizioni sulla scheda SD/unità USB del tuo telefono o tablet. Puoi aggiungere più RAM al tuo dispositivo creando una partizione di swap. Puoi anche riparare i danni al file system della scheda SD. Supporta solo il tipo di partizione "principale".
Funzioni:

  • creazione di partizioni;
  • eliminazione delle partizioni;
  • ripristino di file system danneggiati.

File system supportati:

  • FAT16, FAT32, EXT2, EXT3, EXT4, SWAP, NTFS (a partire dalla versione MoalBoal).

Requisiti:

  • Telefono root;
  • disponibilità di Busybox;
  • installazione nella memoria interna;
  • Prima di iniziare a lavorare con l'applicazione, scollegare la scheda SD.

Istruzioni su come creare partizioni utilizzando il programma

La prima cosa da fare è trasferire tutti i tuoi file importanti dall'unità flash al tuo PC, dopodiché tutto verrà eliminato dall'unità flash.

- Apri il programma

Nella sezione Crea, fai doppio clic sul segno più “+”

La prima sezione "Parte 1" seleziona Fat32, la seconda "Parte 2" seleziona l'ext2/3/4 desiderato o lo scambio.
- Utilizzare il dispositivo di scorrimento per impostare la dimensione di ciascuna sezione; la casella di controllo "Formato" deve essere selezionata.

Conferma "Ok"

Tutto è pronto.

Come riportare un'unità flash alla piena capacità
Se decidi di eliminare la seconda partizione dall'unità flash, puoi farlo.
- Vai alle impostazioni del telefono, "Memoria" e fai clic su "Rimuovi scheda SD".
- Apri il programma
- Nella sezione Crea, fai clic una volta sul segno più "+".
- Nella "Parte 1" seleziona Fat32, imposta il cursore sulla piena capacità dell'unità flash, la casella di controllo "Formato" dovrebbe essere selezionata.

Softkey, fare clic su "applica modifiche"

Dolphin può memorizzare i dati su una scheda SD virtuale denominata sd.raw. Per impostazione predefinita, verrà creato con una dimensione di 128 MB.

La scheda SD virtuale ha un utilizzo importante per le app homebrew su Dolphin. Le piste personalizzate di Project M e Mario Kart Wii sono due buoni esempi, poiché alcune app homebrew possono funzionare solo utilizzando file archiviati sulla scheda SD dell'hardware reale per il quale sono state progettate.

Contenuto

Creazione di una scheda SD virtuale

Si consiglia di crearne uno con una dimensione di almeno 1 GB per app homebrew di grandi dimensioni, ad esempio Project M, e non più di 2 GB per la migliore compatibilità poiché ci sono problemi di compatibilità con alcune app homebrew che tentano di funzionare con una scheda SDHC sull'hardware reale .

Riga di comando e file eseguibili

WinImage è inaffidabile perché, stranamente, causerà desincronizzazione e pochi altri problemi imprevedibili. ImDisk andrà bene.

Guida rapida per montare e modificare la scheda SD virtuale con Driver del disco virtuale ImDisk:

  1. Fare clic con il tasto destro su sd.raw file quindi fare clic "Monta come disco virtuale ImDisk" dal menu contestuale.
  2. Casella di controllo Supporti rimovibili poi colpisci "OK". La lettera di unità predefinita e tutto il resto andranno benissimo.
    • La scheda SD virtuale apparirà ora come "Disco rimovibile" in cui la finestra nativa di Explorer potrà leggere e scrivere.
  3. Una volta terminata la modifica della scheda SD virtuale, smontala semplicemente facendo clic con il pulsante destro del mouse su "Disco rimovibile", quindi fai clic "Smonta disco virtuale ImDisk" dal menu contestuale.
    • La scheda SD virtuale deve essere smontata prima di essere utilizzata con Dolphin.

Impostazione dei delfini

Vai su Opzioni > Configura... > Wii > e abilita Inserisci la scheda SD.

Utilizzo

Con l'app Homebrew

I file esterni utilizzati per l'app homebrew devono essere archiviati all'interno sd.raw e l'app homebrew stessa ( boot.elf O boot.dol) deve esistere al di fuori di esso affinché Dolphin possa essere caricato. Il progetto M, ad esempio, verrà caricato dalla root SD \progetto\ e Dolphin dovrà lanciare il Progetto M \apps\progetto\boot.elf, NON nella scheda SD virtuale. Per comodità, è ideale avere le stesse copie in parallelo tra l'interno e l'esterno della scheda SD virtuale.

Tuttavia, è possibile avviare l'app homebrew dalla scheda SD virtuale tramite exploit homebrew per Wii.

L'app di avvio del gioco Wii funzionerà solo se un particolare gioco Wii è impostato come ISO predefinito. Nell'elenco dei giochi Dolphin, apri il menu contestuale (tasto destro del mouse) su qualsiasi gioco Wii e fai clic Imposta come ISO predefinito. Fallo prima di caricare un'app homebrew con Dolphin.

Per NetPlay

Netplay alla fine si sincronizzerà se qualcosa legge la scheda SD virtuale che non è clonata, indipendentemente dalla stessa dimensione in cui è stata creata e dalle identiche strutture di file/cartelle all'interno della sua radice. Per evitare ciò, sd.raw deve essere copiato dal computer dell'host ai computer dei partecipanti prima di avviare netplay. Se la scheda SD virtuale è stata utilizzata offline o online con il blocco di scrittura disabilitato, il checksum MD5 cambierà ("La data di accesso" dei file è ciò che è diverso nella scheda SD virtuale), ma non causerà la desincronizzazione. La scheda SD è riuscita a provenire da altrove o soggetto a file modificati all'interno per essere "diversi".

Per l'app di avvio del gioco Wii, gli utenti di entrambe le estremità devono prima avere le stesse copie dell'app homebrew e del gioco nell'elenco dei giochi, quindi impostare il gioco come ISO predefinito, come menzionato nella sezione precedente.

Alcuni dispositivi Android dispongono di slot per schede di memoria (solitamente in formato microSD). Se il tuo dispositivo supporta le schede SD, puoi:

  • aumentare la capacità di memoria;
  • utilizzare la scheda per alcune funzioni e applicazioni.

Per scoprire se il tuo dispositivo è dotato di uno slot per scheda SD, visita il sito Web del produttore.

Nota. Alcuni di questi passaggi possono essere eseguiti solo su dispositivi con Android 6.0 e versioni successive.

Come installare una scheda SD

Passaggio 1: inserire la scheda SD.
  1. Controlla dove si trova lo slot della scheda SD.
  2. Spegni il telefono.
  3. Rimuovere il vassoio della scheda SD o rimuovere la cover posteriore del dispositivo (a seconda del modello). Se necessario, sollevare la linguetta che trattiene la carta.
  4. Posiziona la scheda SD nello slot. Se hai sollevato la linguetta di fissaggio, abbassala.
  5. Reinstallare il vassoio della scheda SD o la cover posteriore del dispositivo.
Passaggio 2: accendi la scheda SD.
  1. Attendi che venga visualizzata la notifica della scheda SD.
  2. Clic Sintonizza.
  3. Seleziona il tipo di archiviazione desiderato.
    • Spazio di archiviazione rimovibile:
      Puoi trasferire la scheda su un altro dispositivo insieme a tutti i tuoi file (come foto e musica). Le applicazioni non possono essere spostate su un'unità rimovibile.
    • Memoria interna:
      La scheda può memorizzare app e dati solo per quel dispositivo. Se lo sposti su un altro dispositivo, tutti i dati su di esso verranno eliminati.
  4. Segui le istruzioni visualizzate sullo schermo per configurare la scheda SD.
  5. Al termine, fare clic su Pronto.

Come utilizzare una scheda SD

Come spostare le app sulla scheda SD

Se hai collegato la scheda come memoria interna, puoi trasferirvi le applicazioni.

Nota. Non tutte le applicazioni possono essere trasferite su una scheda SD.

Come spostare i file sulla scheda SD

Se hai installato una scheda SD come dispositivo di archiviazione rimovibile, puoi trasferirvi vari file, come musica e foto. Successivamente, possono essere eliminati dalla memoria interna del dispositivo.

Passaggio 1: copia i file sulla scheda SD.

Passaggio 2: elimina i file dalla memoria interna.

È possibile visualizzare il contenuto della scheda SD e vedere quanto spazio è rimasto.

Quando la scheda SD viene utilizzata come memoria interna

Quando la scheda SD viene utilizzata come dispositivo di archiviazione rimovibile

  1. Scorri verso il basso dalla parte superiore dello schermo per aprire il pannello delle notifiche.
  2. Sotto la notifica della scheda SD, tocca Aprire.

La necessità di dividere una scheda di memoria in più sezioni sorge solitamente quando un telefono/tablet Android non dispone di memoria integrata sufficiente per installare applicazioni. Eseguendo un'operazione simile, puoi liberare spazio sul telefono, ad esempio, spostandoti nella seconda sezione di una scheda microSD. In precedenza, ti abbiamo già spiegato come creare/unire partizioni su una scheda di memoria utilizzando e.

Non è sempre possibile trovare un ripristino per un telefono/tablet specifico che supporti il ​​partizionamento della scheda di memoria, quindi in questo articolo ti spiegheremo come farlo utilizzando l'applicazione Android AParted.

Questa applicazione fornisce le seguenti funzionalità (dalla documentazione ufficiale):

  • Partizionamento della memoria esterna/interna di un dispositivo Android.
  • Formattare la memoria esterna/interna di un dispositivo Android.
  • Rimozione delle partizioni.
  • Controllo e correzione degli errori del file system.
  • Ridimensionamento delle partizioni.
  • Aggiornamento dei file system.

In questo articolo utilizzeremo solo il primo di essi.

Preparazione per il picchettamento

Prima di crollare, assicurati di farlo copia di backup dati importanti per te (foto, video, ecc.), poiché tutti i file verranno eliminati dalla scheda di memoria durante il processo di partizionamento.

Assicurati che sia presente sul tuo telefono; senza di esso AParted non funzionerà.

Prima di avviare l'applicazione, è necessario disattivare la scheda di memoria nelle impostazioni di Android. Per fare ciò, vai su “Impostazioni > Memoria”, nella sezione della scheda microSD collegata, fai clic su “Rimozione sicura” e conferma l'azione.

Layout delle sezioni future

Avvia l'applicazione AParted, nella scheda "CREA" vedrai due rappresentazioni grafiche della scheda di memoria sotto forma di rettangoli: il rettangolo inferiore con la scritta "SD memory card msdos Partition Tables" mostra il layout della partizione corrente e quello superiore una "Nuove tabelle delle partizioni msdos" - il layout delle future partizioni sulla scheda microSD.

Fare clic sul pulsante "AGGIUNGI" per aggiungere la prima sezione e utilizzare il dispositivo di scorrimento per specificarne le dimensioni. Questa sezione sarà disponibile sul telefono/tablet come memoria esterna per foto, musica, ecc. Per una suddivisione più precisa cliccate sulla cifra con MB, nel campo che appare inserite la dimensione esatta in megabyte e confermate le modifiche cliccando su “OK”. Lascia abilitata la casella "Formato" e lascia invariato il file system "fat32".

Fare nuovamente clic sul pulsante "AGGIUNGI" per aggiungere una seconda partizione sulla scheda microSD, che in futuro servirà come estensione della memoria di sistema del dispositivo Android. Seleziona lo spazio rimanente con il cursore, lascia abilitata la casella "Formato", fai clic sulla scritta "fat32" e seleziona uno dei seguenti file system: "ext2", "ext3" o "ext4".

E qui inizia il divertimento, è consigliabile selezionare l'opzione “ext4”, ma ci sono diversi motivi per cui non potrete creare una partizione in questo file system: il kernel/firmware del sistema Android, la classe/produttore (qualità) della scheda di memoria, ecc.

Pertanto, sperimenta, prova prima a creare una partizione con “ext4”, poi “ext3” ed “ext2”. Dopotutto, l'app Link2SD supporta tutti i file system di cui sopra.

Dopo aver eseguito le operazioni di cui sopra, il rettangolo etichettato "Nuove tabelle delle partizioni msdos" dovrebbe visualizzare il layout delle future partizioni della scheda di memoria.

Esecuzione di un appostamento

Per applicare il layout delle nuove partizioni alla memory card, fare clic sul pulsante "APPLICA". L'applicazione AParted ti avviserà che tutti i dati sul supporto rimovibile verranno cancellati.

Successivamente, verrà visualizzato il processo di partizionamento e formattazione delle partizioni della scheda di memoria, al termine del quale il grafico inferiore “Tabella delle partizioni msdos della scheda di memoria SD” visualizzerà il risultato del partizionamento del supporto. Vai di nuovo su "Impostazioni > Memoria" del tuo telefono/tablet e nella sezione memoria esterna, fai clic su "Connetti scheda SD". Dopo aver collegato e analizzato la scheda microSD dal sistema Android, vedrai che la sua memoria è ridotta alla dimensione impostata.

Se lo stato del telefono mostra un messaggio che indica che la scheda SD è danneggiata, riavviare il sistema Android, dopo aver riavviato la scheda di memoria dovrebbe connettersi automaticamente.

Configurazione di Link2SD

Installa ed esegui. Il programma dovrebbe rilevare automaticamente la presenza di una seconda partizione sulla scheda di memoria e richiedere la creazione di uno script di montaggio. Seleziona nell'elenco il file system della seconda partizione che hai specificato durante il partizionamento della scheda di memoria nell'applicazione AParted, conferma la richiesta e dopo aver completato l'operazione, fai clic sul pulsante "Riavvia dispositivo".

Dopo aver riavviato il sistema Android, puoi trasferire le applicazioni dalla memoria del dispositivo alla seconda partizione della scheda di memoria esterna.