2013-03-23 12 views
6

Primo contesto di ciò che sto cercando di ottenere -Determina il tipo Mime di un uri in Android restituito da un intento?

Sto sviluppando un'applicazione di condivisione di immagini per la quale ho bisogno che l'utente scelga un'immagine dal filesystem.

Per questo, io sto usando questo codice -

Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT); 
    photoPickerIntent.setType("image/*"); 
    startActivityForResult(photoPickerIntent, REQUEST_CODE_IMAGE_PICKER_INTENT); 

Ora, questo innesca un selettore in cui vedo più opzioni tra cui Galleria e un App FileManager che ho nel mio telefono. Se seleziono la galleria e scelgo un'immagine da lì, la mia attività riceve un intent con un uri di contenuto di un'immagine. Ma se scelgo l'app FileManager, posso scegliere qualsiasi file che potrebbe non essere un'immagine. Quindi, quello di cui ho bisogno è essere in grado di determinare il tipo di mimo dell'uri restituito nell'intento. Il metodo getType dell'intento restituisce null.

C'è un modo per determinare il mimo dall'intento restituito per poter determinare se il contenuto è un'immagine o meno.

Se ciò non funziona in questo modo, quindi potrebbe essere necessario utilizzare MimeTypeMap per determinare il mime dall'estensione del file.

risposta

17

Ho trovato un modo per ottenere il tipo mime di un contenuto uri ma non ha funzionato per altri tipi di uri come uri del modulo 'file: // .....'.

Per ottenere il tipo MIME Uri contenuti di -

ContentResolver cr = this.getContentResolver(); 
    String mime = cr.getType(YOUR_CONTENT_URI); 

Questo funziona solo per URI contenuti di. Quindi per altri uri sto usando MimeTypeMap per dedurre il loro tipo di mime dall'estensione del file.

+0

ho provato lo stesso, dentro la mia 'onActivityResult()', ma 'getType (data.getData())' ritorno mi nullo – NarendraJi

4

se avete URI allora si può ottenere tipo MIME come

Uri uri = Uri.fromFile(file); 
ContentResolver cR = context.getContentResolver(); 
String mime = cR.getType(uri); 

o provare // url = percorso di file o quello che volete URL adatto.

public static String getMimeType(String url) 
{ 
    String type = null; 
    String extension = MimeTypeMap.getFileExtensionFromUrl(url); 
    if (extension != null) { 
     MimeTypeMap mime = MimeTypeMap.getSingleton(); 
     type = mime.getMimeTypeFromExtension(extension); 
    } 
    return type; 
} 

Per maggiori dettagli see these Answers