2015-07-08 5 views
5

Sto scrivendo un'applicazione utilizzando il database SQLite. Ho già programmato il backup del mio database SQLite. Ora voglio essere in grado di ripristinare il mio database dell'applicazione da tale copia. Sto usando la finestra di dialogo "Apri da" del dispositivo Android. Vedo il file se uso altri fornitori di contenuti nell'elenco, come ad esempio "Trasferimento file Bluetooth"! Ma non lo vedo se provo a usare l'opzione "Download".Android: qual è il tipo MIME da usare se voglio vedere/scegliere un database SQLite dalla cartella Download?

Ho copiato un database SQLite nella cartella dei miei download. Ho provato a utilizzare fileIntent.setType ("/").

Grazie.

risposta

0

Non ho una risposta completa. Invece offrirò alcune idee.

Non sono sicuro di cosa intendi con la finestra di dialogo "Apri da". Suppongo che intendi la finestra di dialogo "Scelta risorse", che mostra le icone delle app in grado di gestire l'intento.

Molte app Android utilizzano MimeTypeMap per associare estensioni di file e tipi MIME. Non esiste alcun metodo per iterare su MimeTypeMap per vedere quali sono tutte le sue mappature. Sono abbastanza fiducioso these are the mappings. Non c'è nessuna voce nell'elenco per SQLite. Un tipo MIME convenzionale per SQLite sarebbe "application/x-sqlite3".

Nel tuo post hai incluso fileIntent.setType("/"). Immagino che tu abbia effettivamente digitato fileIntent.setType("*/*") e, poiché non è stato citato, il formattatore ha mangiato le due stelle.

Poiché è possibile fornire qualsiasi estensione desiderata per i file di database SQLite, si ha una certa flessibilità nella scelta di uno che produce i risultati desiderati. Immagino che tu voglia trovare qualcosa che non solo causerà il download da includere nella finestra di dialogo di scelta, ma anche l'esclusione di app indesiderate. Probabilmente dovrai sperimentare dopo aver esaminato l'elenco dei mapping supportati da MimeTypeMap.

+0

Grazie, qbix, per il tempo di esaminare la mia domanda. Sì, volevo dire star slash star per il tipo MIME. Ed era quello giusto da usare, ho scritto un codice di debug per controllare il tipo Mime del file SQLite ed è effettivamente la stella della stella. –

+0

E la finestra di dialogo "Apri da" è quella che ti consente di selezionare "Recenti", "Download", scheda SD esterna, memoria interna o utilizzare da un elenco di applicazioni. Ho potuto selezionare un file solo utilizzando alcune delle applicazioni elencate.Ad esempio, potrei usare ES File Explorer o Dropbox. –

11

È application/x-sqlite3. Lo uso nella mia app.

More info here.

Ecco un esempio di come lo uso:

File backupDB = ...; 

//Uri uri = Uri.fromFile(backupDB); //From Android 7, this line results in a FileUriExposedException. Therefore, we must use MyFileProvider instead... 
Uri uri = FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".com.example.myapp.myfileprovider", backupDB); 

Intent newIntent = new Intent(Intent.ACTION_VIEW); 
newIntent.setDataAndType(uri, "application/x-sqlite3"); 
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
newIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

startActivity(newIntent); 

Per completezza, ecco la mia MyFileProvider.java classe:

package com.example.myapp; 

import android.support.v4.content.FileProvider; 

public class MyFileProvider extends FileProvider { 
} 

Ed ecco come dichiarare nel manifest:

<provider 
    android:name=".MyFileProvider" 
    android:authorities="${applicationId}.com.example.myapp.myfileprovider" 
    android:exported="false" 
    android:grantUriPermissions="true"> 
    <meta-data 
     android:name="android.support.FILE_PROVIDER_PATHS" 
     android:resource="@xml/my_file_provider_paths"/> 
</provider> 

E, infine, ecco la mia my_file_provider_paths.xml:

<?xml version="1.0" encoding="utf-8"?> 
<paths> 
    <external-path name="external_files" path="."/> 
</paths> 
+0

è sempre aperto solo cartelle non **. Db ** file, per favore aiuto. –

+0

Ho appena modificato la mia risposta con un esempio di come la utilizzo. Spero che questo ti possa aiutare. :-) –

Problemi correlati