Come configurare smartphone e PC. Portale informativo
  • casa
  • Sicurezza
  • Un metodo di protezione dalla copia non autorizzata di file nella radice di una scheda flash per gli utenti di OS WINDOWS. Dov'è la radice della scheda di memoria?

Un metodo di protezione dalla copia non autorizzata di file nella radice di una scheda flash per gli utenti di OS WINDOWS. Dov'è la radice della scheda di memoria?

1. Carica il file di installazione del dispositivo SAS4Android.apk

2. Abilita sul tuo dispositivo (telefono, tablet, ecc.) il permesso di installare applicazioni di terze parti (non dal Market). Questo può essere fatto nelle impostazioni del tuo dispositivo: Impostazioni - Sicurezza - Fonti sconosciute- selezionare la casella Consenti l'installazione di applicazioni da fonti sconosciute(Dopo aver installato SAS4Android, questa casella di controllo può essere deselezionata). Copia il file SAS4Android.apk sul tuo dispositivo ed esegui la sua installazione.

3. Esegui il file SAS4Android.apk .

4. Al primo avvio, appare una finestra che chiede il percorso alla radice della scheda CD e accetta i termini di utilizzo. premere OK. Inoltre, al primo avvio, viene creata automaticamente la cartella di lavoro dell'applicazione - SAS4Android e c'è una cartella opera. Questa è la cartella di lavoro del programma, in cui verranno salvati i dati necessari. Si prega di notare che è necessario specificare percorso alla radice Schede SD (e non in altre cartelle): questo è importante!

Per impostazione predefinita, la struttura delle cartelle del programma è la seguente:

SD card_root / SAS4Android / lavoro - cartella di lavoro - creata automaticamente;

SDcard_root / SAS4Android / cache - cartella con cache - creata dall'utente.

Se viene utilizzata la struttura di cartelle predefinita, il programma rileva automaticamente i percorsi delle cartelle e dei file richiesti. Se viene utilizzata una struttura di cartelle diversa, i percorsi devono essere specificati manualmente. Sui dispositivi con versione Android precedente alla 4.3.x, si consiglia di utilizzare la struttura di cartelle predefinita.

È possibile determinare il percorso della scheda nel modo seguente: Prima di inserire la scheda SD nel dispositivo, creare (su un computer) una cartella su di essa con comprensibile per te nome, per esempio nome.
Scollega il dispositivo dal computer, altrimenti la scheda SD in modalità di archiviazione non sarà disponibile per Android e tutti i programmi. (È più comodo utilizzare il programma MyPhoneExplorer per comunicare con un computer, che consente di modificare le informazioni sul dispositivo tramite un computer e la scheda SD rimane accessibile a tutti). Apri qualsiasi file manager sul tuo dispositivo ed entra il più radice directory del dispositivo. Ci saranno diverse directory. Sfogliando il loro contenuto, trova in una di esse la "tua" cartella. Il percorso in cui viene visualizzato il file manager radice questa directory è ciò di cui hai bisogno. Memorizzalo o scrivilo. In diversi dispositivi e versioni di Android, sono possibili diverse opzioni per la posizione e il nome della cartella della scheda SD. Se c'è una cartella mnt Per esempio mnt / sdkard , o mnt / external_sd , o mnt / extSdkard ... Su alcuni dispositivi, le cartelle mnt potrebbe non essere. In questo caso, la cartella montata sulla scheda solitamente si trova proprio nella root del dispositivo, ad esempio: / Sdkard o / Sdkard1 o / extSdkard ... Nelle versioni Android 4. e successive, di solito si trova la seguente cartella: archiviazione / Sdkard o memoria / Sdkard1 o storage / external_sd o storage / extSdkard .
Quindi, supponiamo di aver determinato che la nostra scheda SD è montata come / mnt / esterno ... Questo è esattamente il percorso che devi inserire (o è meglio sceglierlo aprendo la finestra di dialogo del file con il pulsante [...]) al primo avvio del programma prima che appaia il menu.

Funzionalità di avvio su Android 4.4 e versioni successive

Su Android 4.4 e versioni successive, i diritti dell'applicazione per scrivere sulla scheda SD sono stati rimossi. Se il produttore non ha corretto il firmware durante l'assemblaggio, l'applicazione su un dispositivo senza root non sarà in grado di scrivere sulla scheda SD. In questo caso, il programma stesso proverà a trovare dove posizionare la directory di lavoro. Molto probabilmente sarà una directory nella sezione dei dati dell'applicazione nella memoria interna (non di archiviazione) del dispositivo.
In questo caso, il programma funzionerà, i dati verranno scritti nella cartella opera , leggi da lì. Ma l'utente sarà privato dell'opportunità di prendere qualsiasi cosa dalla cartella opera o metti qualcosa lì. Ovviamente stiamo parlando di un dispositivo senza root. Se questo stato di cose è adatto all'utente, non è necessario fare altro. Altrimenti, devi lavorare con le tue mani.
Abbiamo bisogno di trovare un posto sul dispositivo in cui il programma possa scrivere dati, e possiamo prendere questi dati da lì e aggiungere i nostri, se necessario.
Sperimentalmente, siamo riusciti a trovare un posto del genere. Procedura d'installazione:

1. Colleghiamo il dispositivo con un cavo USB al computer e creiamo nella directory memoria interna cartella Dati ... O nel dispositivo stesso, facciamo lo stesso usando il file manager. Il percorso deve essere memoria / sdcard0 / Dati ... Nella cartella Dati mettiamo il file .nomedia .
Attenzione! Tutti i tentativi di creare una cartella opera(visibile e modificabile sul computer) in altri luoghi/cartelle della memoria interna senza esito... Puoi crearlo e anche quando avvii SAS4Android per la prima volta, puoi specificare il percorso della cartella desiderata. Ma dopo l'installazione, l'accesso a questa cartella diventa impossibile. Puoi guardare attraverso il file manager del dispositivo, ma è impossibile aggiungere qualcosa (tracce, una nuova chiave di licenza, configurazioni mappa/livello, ecc.) da una scheda o un computer rimovibile o copiarlo su una scheda o un computer rimovibile.
Perché è stato selezionato il nome per la cartella? "Dati" ? Il trucco è che corrisponde al nome Dati , accettato nella terminologia standard del dispositivo e, inoltre, Android distingue tra lettere maiuscole e minuscole. In totale, il sistema Android percepisce questa cartella come propria e non limita i suoi contenuti nei diritti.

Ecco un modo già pronto e collaudato per aggirare le restrizioni di Android 4.4x. All'utente non è vietato sperimentare la posizione e il nome di questa cartella.

Ora la cartella che abbiamo creato memoria / sdcard0 / Dati fungerà da percorso da specificare al primo avvio del programma.
2. Crea alla radice esterno Cartella della scheda SD SAS4Android , e in questa cartella c'è una cartella cache ... Abbiamo messo la cache lì. Il percorso della cache sarà .
3. Al primo avvio, il programma chiederà il percorso alla radice della scheda SD. Indichiamo il percorso della cartella che abbiamo creato: memoria / sdcard0 / Dati ... Nella cartella Dati il programma creerà una cartella SAS4Android , e in esso la cartella opera con un set di file di base standard. Ora tutti i file di lavoro del programma si troveranno nella cartella archiviazione / sdcard0 / Dati / SAS4Android / lavoro e avremo accesso ad essi.
4. Ora devi dire al programma il percorso della cache, poiché lo abbiamo diverso dal percorso predefinito. Per fare ciò, nel programma in esecuzione, immettere Impostazioni - Directory della cache della mappa e usando la finestra di dialogo del file specifica il percorso memoria / sdcard1 / SAS4Android / cache .Installazione completata.
#!!! Numerosi controlli hanno dimostrato che con questa installazione di SAS4Android in dispositivi con sistema operativo Android 4.4.4, con ulteriori aggiornamenti o addirittura rimozione e reinstallazione completa dell'applicazione, la directory memoria / sdcard0 / Dati rimane funzionante, contenuto opera non si perde e non si rompe, accesso all'editing opera sia attraverso il dispositivo che attraverso il computer è aperto. Testato su Sony Xperia Z, Z3 compact e WinXP / Win7.
#!!! Che la directory di lavoro opera è costretto a essere nella memoria interna del dispositivo, c'è un vantaggio significativo: in caso di errore / caduta della scheda SD sul campo, e questo può succedere a chiunque, perdi (temporaneamente) solo la cache, e il tracklog e il resto del contenuto opera rimarranno integri e funzionanti.
Consigli : è sempre utile avere un'estrema riservatezza - periodicamente, dopo la comparsa di nuovi tracciati e punti importanti, copio/salvo questo lavoro modificato opera alla scheda SD nella cartella nativa SAS4Android, accanto a cache ... Là opera, ovviamente, non funziona: è solo un salvataggio. E all'improvviso la bestia si guasta - quindi la carta ti aiuterà per il recupero parziale.

#!!! In Android 4.4.x (se il produttore non ha modificato il firmware durante l'assemblaggio) scambio online mappare i dati in una cache decompressa da servizi di terze parti utilizzando script scritti in JavaScript, senza radice possibile solo alla memoria interna. Per caricare la cache in linea dovrai creare anche una seconda cartella cache nella directory di lavoro del programma archiviazione / sdcard0 / Dati / SAS4Android / e metti in esso in anticipo il numero richiesto di cartelle con i nomi delle fonti di mappe / livelli e con gli script inseriti in esse. Dovrai abituarti a passare tra le due directory della cache a seconda delle tue esigenze attuali: lavorare senza scambiare - con il principale cache , e con il pompaggio - passiamo a cache nella memoria interna.

Uscire dal menu delle impostazioni del programma.

Dopo aver avviato il programma, l'uscita dal menu delle impostazioni viene eseguita premendo il pulsante di sistema "Menu". Può essere un pulsante hardware o un pulsante sullo schermo nella parte inferiore dello schermo ( tre punti verticali). A seconda del tuo dispositivo e della versione di Android su di esso, questo può essere un pulsante hardware o un pulsante sullo schermo nella parte inferiore dello schermo. Su molti nuovi dispositivi con versioni Android 4 e successive, questo pulsante è combinato con il pulsante per l'elenco delle applicazioni in esecuzione ( due rettangoli allineati). In questo caso per uscire dal menù è sufficiente tieni premuto pulsante delle applicazioni in esecuzione fino a quando non viene visualizzato il menu delle impostazioni.

Funzionalità per attivare e disattivare SAS4Android

All'avvio del programma, vengono attivate tutte le modalità: visualizzazione delle mappe, navigazione, registrazione di un registro di traccia (avvio di un servizio). È possibile uscire dall'applicazione (metterla in modalità di sospensione) senza interrompere il servizio, ad es. registrazione del registro di traccia. A seconda delle impostazioni (modalità di registrazione del registro di traccia, modalità di arresto del servizio), se necessario, avviare un altro programma, chiamare o rispondere a una chiamata mentre si salva il servizio in esecuzione, utilizzare il pulsante indietro, o il pulsante "home" sotto forma di una casa.

Per interrompere il servizio, a seconda delle impostazioni, utilizzare un doppio clic sul pulsante "Indietro", oppure abbassare la "tenda", nell'elenco delle applicazioni in esecuzione, fare clic sulla riga SAS4Android, premi il bottone Fermare.

#!!! Nei tablet, molto spesso la barra di stato è in basso. Sul lato destro, sono raggruppate le icone delle applicazioni in esecuzione. Se fai clic su qualsiasi icona, verrà visualizzata una finestra con un righello con icone per "Parametri rapidi" (audio, luminosità WiFi, BT, rete, posizione, ecc.) E di seguito è riportato un elenco riga per riga di esecuzione applicazioni.

Caratteristiche della distribuzione del programma

Programma SAS4Android distribuito gratuitamente.

Data di scadenza della domanda - nota dell'autore.

Dopo ripetute e dannose violazioni del copyright da parte di alcuni commercianti di navigatori disonesti, l'autore ha dovuto introdurre una restrizione - dopo l'installazione (o il successivo aggiornamento) del programma SAS4Android funziona correttamente per 1 mese dalla data di pubblicazione dell'aggiornamento, quindi "si interrompe parzialmente" - marcire... Questo si esprime nella riduzione del tempo di registrazione continua del tracklog (normalmente entro 20-30 minuti) dopo il quale la registrazione si interrompe, sullo schermo compare un messaggio corrispondente. Quindi non resta che riavviare il programma (chiudere l'applicazione e il servizio e riavviarli). E così un numero imprevedibile di volte fino alla fine del viaggio. In questo caso, le tracce vengono registrate, ma con interruzioni. Una soluzione semplice ma problematica a questo problema è un aggiornamento regolare, una volta al mese. Ogni nuovo aggiornamento ha una data di "dissolvenza" successiva, quindi aggiorna e vai avanti ...

Ma c'è un modo migliore.

Il programma ha un algoritmo per rimuovere la restrizione: la chiave license.dat, che disabilita la "dissolvenza". L'autore consegna le chiavi in ​​segno di gratitudine a coloro che hanno sostenuto il progetto. Quindi non chiedere "quanto" o "come comprare". Vai a qualsiasi pagina del forum e dai un'occhiata da vicino all'intestazione.

Le chiavi non sono in vendita! Le donazioni con qualsiasi menzione di chiavi o acquisti nei commenti verranno restituite al mittente.

Per generare una chiave, hai bisogno di un file deviceld.txt ... È formato dal programma SAS4Android stesso e inserito nella cartella opera .

Innanzitutto, controlla che ci sia un file sul tuo dispositivo. deviceld.txt c'è.

Se non è presente, non sarai in grado di creare una chiave per il tuo navigatore (ahimè, ci sono alcuni modelli molto troncati su cui questo meccanismo non funziona).

Se hai un file deviceld.txt vuoto o non funzionante (rimasto dalla vecchia versione del programma a un ripristino delle impostazioni di fabbrica o un aggiornamento del sistema).

1. Rimuovi il vecchio deviceld.txt .

2. Eseguire il programma.

3. Stiamo aspettando che i satelliti vengano catturati (la linea delle coordinate diventerà nera).

4. Chiudere il programma. Un identificatore valido dovrebbe apparire nella cartella opera .

Attenzione al fatto che la chiave sia legata all'ID del dispositivo. Su Android, l'installazione di un aggiornamento di sistema modifica l'ID del dispositivo. Questo è anche il risultato di un ripristino delle impostazioni di fabbrica. (Perché? Chiedi ai produttori del tuo dispositivo).

Quindi, se aggiorni il sistema o esegui un ripristino dei dati di fabbrica, la chiave smetterà di funzionare.

Tuttavia, questo può essere risolto cambiando la chiave. Tutte le domande sulla rimozione delle restrizioni, chiedi all'autore del programma in un messaggio personale.

Penso che tutti abbiano affrontato il problema dei malvagi "auto-runner". E ci sono molti modi per risolverlo: software open source, script, "ballare con un tamburello", ecc. Voglio offrire un algoritmo di soluzione semplice per gli utenti di OS Windows, che non richiede l'intervento di terze parti. Per raggiungere l'obiettivo, abbiamo bisogno di diversi passaggi, più precisamente due.

Passaggio n. 1 - preparazione

Formattazione del file system multimediale in NTFS utilizzando il sistema operativo.

Nessun NTFS quando si scelgono le opzioni di formattazione

Se non è disponibile alcuna opzione per formattare il file system in NTFS, come nel caso di Windows XP, procediamo come segue:

  1. Entriamo nelle proprietà dell'unità flash;
  2. Vai alla scheda "Attrezzatura;"
  3. Seleziona la nostra scheda flash e fai clic sul pulsante delle proprietà;
  4. Vai alla scheda "Politica";
  5. Scelta dell'opzione per utilizzare la cache;
  6. Accettiamo modifiche e formattazione in NTFS;
  7. Quindi torniamo a "Eliminazione rapida".

Fase numero 2 - differenziazione dei diritti

Ora creiamo una cartella ("cartella di lavoro") nella radice e impostiamo immediatamente un nome (in futuro è impossibile cambiare il nome della cartella), tutte le informazioni verranno archiviate in essa. Ma la radice della cartella sarà di sola lettura. Ora distinguiamo i diritti:
  1. Entriamo in sicurezza: apri le proprietà dell'unità flash, la scheda "Sicurezza";

    Se non esiste tale scheda, allora facciamo quanto segue

    1. Vai alle "Opzioni cartella" nel "Pannello di controllo";
    2. Nella scheda della vista nell'elenco "Parametri aggiuntivi", troviamo il parametro contenente le parole "accesso generale" e "(consigliato)";
    3. Rimuoviamo il daw.
    Ora è apparsa la scheda
  2. Fare clic sul pulsante "Avanzate";
  3. Nella finestra che si apre, vai alla scheda "Proprietario" e premi il pulsante "Cambia";

    Per XP

  4. Inseriamo la casella di controllo "Sostituisci il proprietario di sottocontenitori e oggetti";
  5. Scegliamo noi stessi e diventiamo proprietari dell'oggetto;
  6. Chiudiamo le finestre di dialogo su richiesta del sistema operativo con il pulsante "OK" e poi apriamo nuovamente le sezioni "sicurezza" e "avanzate";
  7. Modifica le autorizzazioni: per questo, vai su sicurezza e nella scheda "Autorizzazioni", fai clic sul pulsante "Cambia autorizzazioni", elimina i diritti esistenti;

    Per XP

    (in Windows XP non c'è il pulsante "Cambia permessi", agiamo immediatamente lì)

  8. Aggiungi il gruppo "Tutto": premi i pulsanti "Aggiungi", "Avanzate", "Cerca", seleziona il gruppo "Tutto", "OK", "OK" dall'elenco;
  9. Nella finestra che si apre, imposta le impostazioni dei permessi per il gruppo "Tutti":
    • "Applica a: per questa cartella, le sue sottocartelle e i suoi file";
    • Imposta le seguenti caselle di controllo nel campo "Autorizzazioni":
      1. Consenti: "Controllo completo";
      2. Nega: modifica proprietario, modifica autorizzazioni, elimina, elimina sottocartelle e file, scrivi attributi aggiuntivi, scrivi attributi, crea cartelle/aggiungi dati, crea file/scrivi dati.
  10. Accettiamo le modifiche, andiamo nella cartella precedentemente creata nella root della flash card e facciamo quasi le stesse operazioni;
  11. Il cambio di proprietà segue uno schema familiare;
  12. Rimozione dei diritti esistenti deselezionando la casella di controllo "Aggiungi autorizzazioni ereditate da oggetti padre" nella scheda "Autorizzazioni";
  13. Nella finestra di dialogo che appare, seleziona "Elimina";
  14. Aggiungi il gruppo "Tutti" (sappiamo già come fare) e imposta i parametri di autorizzazione:
    • "Applica a: per questa cartella, le sue sottocartelle e i suoi file";
    • Imposta la casella di controllo Consenti: "Accesso completo".
  15. Ancora una volta, aggiungi il gruppo "Tutti" e imposta i parametri delle autorizzazioni:
    • "Applica: solo per questa cartella";
    • Imposta le seguenti caselle di controllo "Nega" nel campo "Autorizzazioni":
      "Cambia proprietario", "Cambia permessi", "Cancella", "Scrivi attributi aggiuntivi", "Scrivi attributi"
professionisti
+ Non è possibile creare/eliminare file e cartelle nella radice della scheda flash. Di conseguenza, la scappatoia per gli "auto-runner" è chiusa.
+ Nella "cartella di lavoro" l'accesso completo - quello che vogliamo, lo giriamo indietro (metti lo stress da solo).
+ File system NFTS: perfetto per l'uso personale. (A PARER MIO)
contro
- Non è possibile utilizzare la voce di menu "Invia" per copiare le informazioni sulla nostra chiavetta USB, perché la directory radice viene chiusa per la scrittura. Deve essere copiato nella "cartella di lavoro".
- Non c'è modo di rinominare la "cartella di lavoro" - alla radice, solo leggere.
- File system NTFS - non adatto a dispositivi che leggono solo FAT (lettori di musica/video, smartphone, fotocamere, ecc.).
Osservazioni
  • Questa operazione viene eseguita al meglio su una "macchina sana". Altrimenti, puoi creare immortal-autorun;
  • SU Windows XP, quando ho provato a eliminare la "cartella di lavoro", è rimasta (come dovrebbe essere), ma è stato eliminato tutto ciò che conteneva;
  • Ma su Windows 7, tutti i file rimangono quando si tenta di eliminare la "cartella di lavoro";
  • All'interno della "cartella di lavoro" non ti salva dal malware che crea un exe "schnick con il nome della cartella quando lo apri.

Varie informazioni in formato elettronico possono essere memorizzate su uno speciale dispositivo chiamato memory card. È progettato per archiviare documenti di testo, registrazioni audio e video, immagini. Il vantaggio principale di questo tipo di memoria è la facilità di registrazione delle informazioni e la compattezza del dispositivo insieme a notevoli quantità di dati memorizzati.

La memoria interna è rappresentata da RAM, memoria permanente e cache. I suoi vantaggi includono prestazioni ad alta velocità e il suo svantaggio è la quantità limitata di dati memorizzati.

Molto spesso, un utente moderno di un personal computer e di altre apparecchiature elettroniche deve affrontare una proposta del genere: "installa nella radice della scheda di memoria" o "copia nella radice della scheda". Può essere trovato ovunque, poiché la tecnologia moderna sta iniziando sempre più a supportare schede di terze parti per aumentare la memoria interna.

Le schede di memoria sono standardizzate. Hanno determinate dimensioni complessive e la posizione delle piazzole di contatto, a seconda del tipo di dispositivi per l'uso a cui sono destinati.

Ciò include laptop, tablet, smartphone, fotocamere digitali e persino PSP con altre console di gioco. Pertanto, per un corretto lavoro con loro, non si può fare a meno di un'idea chiara di cosa può significare l'espressione "radice di una scheda di memoria" e dove può essere posizionata.

Il nome del luogo in cui salvare i dati sulla carta deriva dalla parola inglese root - "root, root", che significa qualcosa di primordiale, primordiale. È entrato in uso all'inizio, quando i computer hanno cominciato ad apparire. Su di essi, la radice era chiamata il contenuto stesso del dispositivo, ovvero il luogo da cui è stato avviato il sistema e dove è possibile salvare i dati. In effetti, questa designazione non è cambiata affatto per quanto riguarda le attuali schede di memoria.

Root directory

Oggi la directory stessa, che si trova sulla scheda, è chiamata radice della scheda di memoria. Questa è la stessa cartella che si avvia quando si fa clic sull'icona con una scheda di memoria in uno smartphone o. È solo che la parola radice è stata tradotta parola per parola, e ora è la sua controparte russa che viene utilizzata per indicare la carta stessa. Pertanto, se ti viene chiesto di copiare i dati nella radice, non è necessario creare nulla di aggiuntivo sulla scheda di memoria, ma semplicemente copiare i file necessari su di essa, nella directory principale.

Quindi è apparso Android Lollipop e con esso nuove funzionalità per lavorare con una scheda SD. Apparso SAF(Storage Acces Framework), è apparso un nuovo Intent ACTION_OPEN_DOCUMENT_TREE, con il quale è possibile selezionare la radice della scheda SD e quindi utilizzarla per le proprie esigenze. In effetti, SAF era ancora su KitKat, ma senza questo Intento aveva poco senso, perché per accedere ai file sulla mappa bisognava usare Intent ACTION_OPEN_DOCUMENT, che, a giudicare dal nome, permette all'utente di selezionare un file che vuole modificare, manualmente tramite il selettore di sistema. Ok, se l'utente ha 5000 file, lo farà? No.

Identificazione dei dispositivi di archiviazione esterni sul dispositivo

Inizierò con l'argomento più doloroso del lavoro con le schede di memoria. Abbiamo un metodo meraviglioso in Android.

File Environment.getExternalStorageDirectory()

Come suggerisce il nome, questo è ciò di cui hai bisogno. "Esterno" significa "esterno", giusto? Ma non dovresti fare affidamento su questo metodo. Può restituire il percorso alla memoria interna, magari alla scheda, ma succede in modo diverso su ogni dispositivo. Questa situazione è in gran parte dovuta ai diversi produttori di telefoni e ai loro firmware e shell modificati. Il mio punto è che il metodo getExternalStorage () può restituire il percorso non alla scheda SD effettiva, ma a quella che il produttore considera un'unità esterna. È qui che sorge la confusione di definizioni. Un'unità esterna non è necessariamente un'unità flash: su alcuni dispositivi è una memoria interna, su alcuni è proprio una scheda SD. I punti di montaggio della mappa possono essere qualsiasi:

  • / archiviazione / extSdCard /
  • / memoria / sdcard1 /
  • /memoria/sdcard0/
  • / mnt / external_sd /
  • / mnt / esterno /
  • /mnt/sdcard2 /
  • / memoria / sdcard0 / external_sdcard /
  • / archiviazione / rimovibile / sdcard1 /
  • / rimovibile / microsd
  • / mnt / media_rw / sdcard1
  • / mnt / emmc

E questo non è un grosso problema finché non lo affronti da solo.

Ci sono molti argomenti su StackOverflow in cui un sacco di opzioni molto diverse per definire un'unità flash, che vanno dall'enumerazione di tutte le possibili combinazioni di punti di montaggio, al tentativo di ottenere le variabili di ambiente java System.getenv ("EXTERNAL_STORAGE"), System.getenv (" SECONDARY_STORAGE") e termina con l'analisi del file di sistema /system/etc/vold.fstab. Questi metodi funzionano, ma ciascuno solo in alcuni casi particolari. Nessuno dei due metodi copre tutti i dispositivi o funziona affatto. E se sembra che tutte le unità vengano rilevate correttamente, ci sarà sempre un dispositivo, la cui scheda non viene rilevata da questi metodi. Ho provato quasi tutti i metodi.

Per capire la portata del problema, dirò che me ne sono occupato per circa quattro mesi. Questo problema esiste dal 2011, ma non esiste ancora una soluzione esatta. Per un po' mi sono accontentato di questo codice più o meno funzionante:

Lista di array allPaths = new ArrayList<>(); Lista di array sdPaths = new ArrayList<>(); for (File file: mContext.getExternalFilesDirs ("external")) (if (file == null) (continue;) int index = file.getAbsolutePath (). lastIndexOf ("/ Android / data"); if (index> 0 ) (String path = file.getAbsolutePath (). Sottostringa (0, index); try (path = new File (path) .getCanonicalPath ();) catch (Exception e) (e.printStackTrace ();) allPaths.add ( percorso); if (! file.equals (mContext.getExternalFilesDir ("esterno"))) (sdPaths.add (percorso);))

Ma si è anche bloccato su alcuni dispositivi. E ancora una volta, dopo aver ricevuto un'unità sul mercato, sono andato alla ricerca.

Ero ossessionato dal selettore di sistema Android (anche un file manager), in cui tutte le unità sono sempre correttamente identificate. Senza pensarci due volte, ho estratto l'apk di sistema usando Root e l'ho decompilato.

illuminismo

Ho scoperto che il selettore utilizza le classi StorageVolume e StorageManager. Itera su tutti gli elementi StorageVolume recuperati utilizzando il metodo StorageManger.getVolumeList () e chiama i metodi StorageVolume.getPath () e StorageVolume.getState () per ciascuno. Il problema è che questi metodi sono nascosti. Non sono privati, ma sono contrassegnati con l'annotazione @hide. Bene, cosa puoi fare, otteniamo la nostra riflessione:

StorageManager getStorageManager () (return (StorageManager) mContext.getSystemService (Context.STORAGE_SERVICE);) / * Usa la riflessione per rilevare tutti gli archivi poiché Android probabilmente non funziona con USB-OTG funziona solo su API 19+ * / elenco pubblico getAllPaths () (Elenco) allPaths = new ArrayList<>(); prova (ClassestorageVolumeClass = Class.forName ("android.os.storage.StorageVolume"); Metodo getVolumeList = getStorageManager (). GetClass (). GetMethod ("getVolumeList"); Metodo getPath = storageVolumeClass.getMethod ("getPath"); Metodo getState = storageVolumeClass.getMethod ("getState"); Oggetto getVolumeResult = getVolumeList.invoke (getStorageManager ()); lunghezza int finale = Array.getLength (getVolumeResult); per (int i = 0; i< length; ++i) { Object storageVolumeElem = Array.get(getVolumeResult, i); String mountStatus = (String) getState.invoke(storageVolumeElem); if (mountStatus != null && mountStatus.equals("mounted")) { String path = (String) getPath.invoke(storageVolumeElem); if (path != null) { allPaths.add(path); } } } } catch (Exception e) { e.printStackTrace(); } return allPaths; }

La domanda è: perché non esiste un modo ufficiale per farlo? Sì, non è del tutto affidabile utilizzare la riflessione in un progetto di combattimento, ma non ci sono altre opzioni: se il sistema stesso utilizza questo codice, funziona in tutti i casi. La pratica lo conferma.

SAF (Storage Access Framework)

Documentazione ufficiale:

La piattaforma SAF consente agli utenti di trovare e aprire facilmente documenti, immagini e altri file nei repository di tutti i fornitori con cui lavorano. Un'interfaccia standard e di facile utilizzo consente agli utenti di trovare i file e accedere ai file aggiunti più di recente in modo coerente con tutte le applicazioni e i fornitori.

p> SAF aggrega i fornitori di contenuti (sottoclassi di DocumentProvider). Questi sono, ad esempio, Google Drive, varie gallerie e gestori di file.

SAF fornisce l'URI dei documenti (file) che dispongono di autorizzazioni di scrittura o lettura. Possiamo dire che questo è un tale livello sopra l'accesso ai file. La classe File stessa non sa nulla di SAF.

p> Per poter modificare i dati sulla scheda, è necessario ottenere l'URI della radice della scheda SD, che avrà i diritti di modifica. Quindi, utilizzando questo URI, puoi ottenere l'URI di qualsiasi file sulla scheda di memoria. Per fare ciò, è necessario avviare il selettore di sistema utilizzando l'intento ACTION_OPEN_DOCUMENT_TREE e chiedere all'utente di selezionare la radice della scheda SD (altrimenti non funzionerà!).

Nelle immagini:


@TargetApi (Build.VERSION_CODES.LOLLIPOP) void showDocumentTreeDialog () (Intent intent = new Intent (Intent.ACTION_OPEN_DOCUMENT_TREE); startActivityForResult (Intent.createChooser (intent, getString_INQURING ).permission_Dialog)

Qui accadono cose molto importanti: in onActivityResult elaboriamo la scelta dell'utente e acquisiamo i diritti desiderati per accedere alla mappa. In generale, i diritti vengono dati fino al riavvio del dispositivo e quindi dopo aver riavviato nuovamente il dispositivo per non inviare l'autorizzazione all'utente, è necessario utilizzare il metodo

TakePersistableUriPermission (Uri uri, int modeFlags)

con bandiere per scrivere e leggere. Dopo tutte queste manipolazioni, è necessario salvare la scheda SD Uri ricevuta da qualche parte per ulteriori lavori con essa, ad esempio in SharedPreferences.

@RequiresApi (api = Build.VERSION_CODES.KITKAT) @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) (super.onActivityResult (requestCode, resultCode, data); if (requestCode == REQUEST_CODE_SD_CARD) (getApplicationContext , data.getData ())) (// fai le tue cose)) @RequiresApi (api = Build.VERSION_CODES.KITKAT) private boolean takePermission (Context context, Uri treeUri) (/ * Sarebbe utile aggiungere un controllo che il l'URI in entrata è un URI della mappa. Lascerò questo compito come esercizio per i lettori * / try (if (treeUri == null) (return false;) context.getContentResolver (). takePersistableUriPermission (treeUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION_ | Intent_FLAGREANT_URI_PERMISSION) ; sharedPreferences.putString (SD_CARD_URI, treeUri.toString ()); return true;) catch (Exception e2) (e2.printStackTrace (); return false;))

Interazione con scheda SD

Il lettore probabilmente già intuisce che non saremo in grado di interagire con i file in modo normale (come file.renameTo (file2)). Se osserviamo il codice del metodo file.renameTo (File), non vedremo nulla di sospetto, nessun controllo. E giustamente, perché i controlli sono a livello di file system. E se proviamo a cambiare il file che si trova sulla scheda SD usando i soliti mezzi, otterremo la seguente eccezione:

Java.io.IOException: impossibile apportare modifiche al file your_file.ext

Ecco un modo interessante per determinare se un file può essere modificato:

Public boolean isFileWritable (File file) (booleano scrivibile; try (new FileOutputStream (file, true) .close (); writable = file.exists () && file.canWrite ();) catch (IOException e) (writable = false; ) torna scrivibile ;)

Se il file è su una mappa, otterremo una IOException.

Per modificare un file su una memory card, dobbiamo ottenere un DocumentFile che rappresenti il ​​nostro file, ma con i permessi di scrittura che abbiamo ottenuto con SAF.

All'inizio di questo articolo, ho parlato di due intenti per SAF: ACTION_OPEN_DOCUMENT_TREE e ACTION_OPEN_DOCUMENT. E ho detto che non useremo il secondo intento, poiché ciò costringe l'utente a cercare il file manualmente. Ma abbiamo l'URI che abbiamo ottenuto usando il primo intento e questo significa... No, non esiste un'API standard per ottenere il DocumentFile, tutto viene gestito.

L'algoritmo è il seguente:

  1. Abbiamo File
  2. Determinare il nome dell'unità su cui si trova questo file
  3. Determiniamo il percorso del file relativo all'unità su cui si trova. Otteniamo una linea come android / cartella / file.txt
  4. Separare la linea con il simbolo «/»
  5. In un ciclo, per ogni parte ricevuta, trova un DocumentFile che rappresenta questo percorso, basato sul DocumentFile della parte precedente
  6. Se l'algoritmo è stato completato senza errori, abbiamo un DocumentFile in uscita, che rappresenta il nostro file

Public DocumentFile getDocumentFile (File file) (DocumentFile document = null; String baseFolder = null; for (String path: getAllPaths ()) (File filePath = new File (percorso); if (filePath.getAbsolutePath (). StartsWith (file.getAbsolutePath) ())) (baseFolder = filePath.getAbsolutePath (); break;)) if (baseFolder == null) (return null;) try (String relativePath = file.getCanonicalPath (). substring (baseFolder.length () + 1) ; Uri permessoUri = Uri.parse (sharedPreferences.getString (SD_CARD_URI)); document = getDocumentFileForUri (permissionUri, relativePath);) catch (Exception e) (e.printStackTrace ();) return document;) / * Metodo per ottenere DocumentFile ( passaggi 4-6) * / private DocumentFile getDocumentFileForUri (Uri treeUri, String relativePath) (String parts = relativePath.split ("/"); if (parts.length == 0) (return null;) DocumentFile document = DocumentFile.fromTreeUri (mContext, treeUri); for (String part: parts) (DocumentFile nextDocument = document.fi ndFile (parte); if (nextDocument! = null) (document = nextDocument;)) restituisce il documento; )

FileOutputStream outputStream = (FileOutputStream) mContentResolver.openOutputStream (documentFile.getUri ());

Un esempio di copia di un file di classe File in DocumentFile:

Public void copyFile (File sourceFile, DocumentFile document) (FileInputStream inputStream = null; FileOutputStream outputStream = null; try (inputStream = nuovo FileInputStream (sourceFile); outputStream = (FileOutputStream) mContentResolver.openOutputStream (document.getUriel ()); FileInputStream (documento .getUriel ()); FileInputStream inputStream.getChannel (); FileChannel fileChannelOut = outputStream.getChannel (); fileChannelIn.transferTo (0, fileChannelIn.size (), fileChannelOut); // noinspection ResultOfMethodCallIgnprint sourceFile) (etraceception (); // noinspection ResultOfMethodCallIgnored sourceFile.delete ();) finalmente (try (if (inputStream! = null) inputStream.close (); if (outputStream! = null) outputStream.close ();) catch (IOException e) (e.printStackTrace ( );)))

E voglio anche dire che ora il codice sarà riempito con tali controlli.

Public void writeFile (File file) (boolean fileWritable = isFileWritable (file); boolean hasSdCardUri =! SharedPreferences.getString (SD_CARD_URI) .isEmpty (); if (fileWritable || hasSdCardUri) (/ * puoi modificare il file normalmente, o SAF * / return;) if (Build.VERSION.SDK_INT> = 21) (/ * welcome! (chiede il permesso all'utente) * / throw new NoLollipopWritePermissionException (); `) else if (Build.VERSION.SDK_INT == 19) (/ * arrivederci! (impossibile modificare) * / lancia una nuova NoKitkatWritePermissionException ();))

Conclusione

Spero che la mia esperienza descritta nell'articolo aiuti coloro che non hanno ancora lavorato con una scheda SD ad evitare molte ricerche e ricerche.

Dov'è la cartella principale di un'unità flash o di una scheda di memoria?

    Se colleghi un dispositivo di archiviazione al tuo computer, in Explorer apparirà come un'unità con una lettera inglese assegnata, se apri questa unità, questa sarà la cartella principale. Puoi creare altre cartelle al suo interno, in ognuna di queste cartelle puoi creare altre cartelle a turno, e così via, e ogni cartella contiene file. Questo può essere immaginato come un albero con un tronco e rami ramificati che si estendono da esso - cartelle - rami, file - foglie, e la radice di questo albero è proprio la cartella radice, da cui il nome.

    Chiamiamo la cartella principale solo la cartella di una specifica unità flash o scheda di memoria. Non appena si inserisce l'unità flash USB, viene visualizzato un nuovo dispositivo di fronte a te, aprendolo ti sposterai nella cartella principale dell'unità (alla radice, che significa a quella iniziale), che può contenere un mucchio di altre cartelle.

    La cartella principale di qualsiasi disco è la cartella principale di quel disco.

    Cioè, quando ti trovi nella cartella principale di un disco, ti sembra che non sei entrato in nessuna cartella.

    Cioè, l'indirizzo della cartella principale è il seguente:

    le unità A: e B: sono solitamente riservate alle unità floppy (per i dischi floppy), che spesso non sono più installate nei computer moderni.

    per un disco rigido, di solito è C:

    D è spesso riservato a un lettore DVD:

    Il resto viene solitamente utilizzato per dispositivi esterni collegabili.

    Ad esempio, per un'unità flash.

    Ma questo, a mio parere, non deve essere in quest'ordine. Qualcuno nel computer potrebbe avere un diverso ordine di corrispondenza dei dispositivi con i nomi dei dischi. Entra nella sezione Il mio computer(se hai Windows) e vedrai come si trova sul tuo.

    La cartella principale del sito ha il seguente indirizzo: http: // nomesito /

    Sebbene per il creatore del sito, sul suo hosting, questa stessa cartella sia molto spesso solo una sottocartella, poiché è possibile creare diversi siti lì, oltre a diverse impostazioni di configurazione.

    La cartella principale è la cartella dell'unità flash stessa, del programma o del disco. Cioè, potrebbero essercene altre (sottocartelle). Cioè, la radice significa l'originale. E se, ad esempio, viene indicato che, ad esempio, un file deve essere trascinato nella directory principale dell'unità flash, è sufficiente posizionarlo sull'unità flash stessa e non in qualche altra cartella su questo flash unità. E anche per analogia con altre risorse.

    Che cos'è una cartella principale e come ci arrivo?

    In effetti, tutto è molto semplice, la cartella principale è la cartella che è considerata l'originale. Se, ad esempio, colleghi la tua unità flash USB al dispositivo, verrà visualizzato un menu attraverso il quale puoi andare alla cartella principale = questa è l'unità flash stessa, in cui possono esserci sia cartelle che file.

    Abbastanza spesso puoi sentire o imbatterti nella frase: installa / sposta / copia un file specifico nella radice di una scheda di memoria o nella cartella principale di una scheda flash;. E qual è e dov'è la cartella principale o semplicemente root unità flash?

    La risposta è in realtà molto semplice. Questo nome deriva da directory principale . Cioè, quando facciamo clic sull'icona della scheda di memoria/scheda flash e si apre una finestra davanti a noi, questa è la stessa cartella principale. Sebbene in realtà folder non vediamo lì. Questa è l'area della mappa stessa con altri file e altre cartelle posizionati su di essa. La cartella principale (o radice) di un'unità flash può essere paragonata alla parte superiore floor nella gerarchia di tutte le cartelle su di esso.

Principali articoli correlati