2013-04-22 20 views
5

Sto usando un Intent per consentire all'utente di selezionare un file, e dopo che l'utente ha fatto ciò, voglio sapere che tipo di file è il file selezionato.ACTION_GET_CONTENT: Come ottenere la fine del file durante la ricerca di più tipi di file?

L'intento:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("*/*"); 

Nel mio onActivityResult Voglio estrarre il percorso dal intento attraverso intent.getData() e tutti che è "submethods" (getScheme(), getLastPathSegment() ecc). Tuttavia, ottengo solo l'Uri per il file selezionato.

Esempio di Uris':

Uri: content://media/external/audio/media/15185 //This is an audiofile 
Uri: content://media/external/audio/media/20 //Another audiofile 
Uri: content://media/external/images/media/20577 //this is a picture 
Uri: file:///storage/emulated/0/testWed%20Apr%2017%2011%3A10%3A34%20CEST%202013 //This is a file 

ho visto soluzioni di come ottenere il percorso assoluto quando l'utente è consentito solo di scegliere le immagini o audio. Ma come faccio a ottenere absolutePath (il vero percorso con il nome e la fine del file, ad esempio MyPicture.jpeg) se voglio consentire all'utente di selezionare da diversi tipi di file?

Il codice che ho twiggling con per cercare di ottenere il nome-percorso in onActivityResult (int requestCode, int resultCode

  String fileName = data.getData().getLastPathSegment().toString(); 
     System.out.println("Uri: " +data.getData().toString()); 
     File f = new File(fileName); 
     System.out.println("TrYinG wIWThA Da FiLE: " +f.getAbsolutePath()); 
     System.out.println("FileNAME!!!: "+fileName); 

risposta

4

By lima fine Sto assumendo vuoi dire l'estensione del file? (cioè mp4)

Se è così è possibile utilizzare la ContentResolver per ottenere il tipo MIME:

String mimeType = getContentResolver().getType(sourceUri); 

Questo vi darà il tipo MIME ammesso che sono all'interno della MediaStore che dovrebbero se avete il contenuto Uri. così avrai qualcosa come "image/png", "video/mp4", ecc

Quindi è possibile utilizzare MimeTypeMap per ottenere l'estensione del file dal mimetype:

String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType); 

notare che si dovrebbe mai sottostringendo il mimetype dopo "/" per ottenere l'estensione poichè alcuni tipi di mimo non usano la sua estensione come i file ".mov" che ha il mimetype "video/quicktime"