2012-03-18 15 views
15

Voglio ottenere come stringa l'estensione dell'immagine (ad esempio "jpg", "png", "bmp" ecc.) Delle immagini caricate dalla galleria o scelto dalla fotocamera.Ottieni l'estensione del file da immagini prelevate dalla galleria o dalla fotocamera, come stringa

ho usato un metodo in questo modulo per caricare le immagini dalla galleria

private static final int SELECT_PICTURE_ACTIVITY_REQUEST_CODE = 0; 
.... 
private void selectPicture() { 
    Intent intent = new Intent(Intent.ACTION_PICK); 
    intent.setType("image/*"); 
    startActivityForResult(intent, SELECT_PICTURE_ACTIVITY_REQUEST_CODE); 
} 
.... 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch (requestCode) { 
     case SELECT_PICTURE_ACTIVITY_REQUEST_CODE: 
      if (resultCode == RESULT_OK) { 
       Uri selectedImage = imageReturnedIntent.getData(); 
       String[] filePathColumn = {MediaStore.Images.Media.DATA}; 
       Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
       if (cursor.moveToFirst()) { 
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
        String filePath = cursor.getString(columnIndex); 
        Bitmap bitmap = BitmapFactory.decodeFile(filePath); 
        ......... 
       } 
       cursor.close(); 
      } 
      break; 
    } 
} 

risposta

48
filePath.substring(filePath.lastIndexOf(".")); // Extension with dot .jpg, .png 

o

filePath.substring(filePath.lastIndexOf(".") + 1); // Without dot jpg, png 
+0

Dove dovrei inserire questo codice esattamente ?? – AndreaF

+0

dopo String filePath = cursor.getString (columnIndex); –

+0

Ho provato senza successo ... cosa è esattamente "strname" ?? Potresti darmi maggiori dettagli guardando il metodo che ho usato ?? Grazie. – AndreaF

0

se si ottiene content://media Uris come risultato e si desidera che l'estensione poi si deve interrogare il database, come si fa ed estrarre se da filePath. Per esempio. con this

Per ottenere il nome del file da un percorso completo la soluzione più semplice è

String filename = (new File(filePath)).getName(); 
4

Penso che questo dovrebbe arrivare a dove si vuole (io non l'ho provato, basta leggere un po 'in giro e Penso che funzioni).

Uri selectedImage = imageReturnedIntent.getData(); 
String[] filePathColumn = {MediaStore.Images.Media.DATA, 
          MediaStore.Images.Media.DISPLAY_NAME}; 
Cursor cursor = 
    getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
if (cursor.moveToFirst()) { 
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
    String filePath = cursor.getString(columnIndex); 
    Bitmap bitmap = BitmapFactory.decodeFile(filePath); 
    int fileNameIndex = cursor.getColumnIndex(filePathColumn[1]); 
    String fileName = cursor.getString(fileNameIndex); 
    // Here we get the extension you want 
    String extension = fileName.replaceAll("^.*\\.", ""); 
    ......... 
} 
cursor.close(); 
+0

No (almeno abbastanza sicuro). 'MediaStore.Images.Media.DISPLAY_NAME' ha il nome file senza estensione. L'unico posto in quel database che include l'estensione è 'MediaStore.Images.Media.DATA' – zapl

+0

Il' Il flusso di dati per il file', hmm? Quindi la documentazione è schifosa. –

+1

meh, mi sbaglio. DISPLAY_NAME ha l'estensione inclusa, TITLE era la colonna in cui è stata rimossa - appena registrato nel db. In DATA hai il percorso completo. – zapl

0

credo che questo dovrebbe utilizzare MediaStore.MediaColumns.MIME_TYPE

String[] projection = { MediaStore.MediaColumns.DATA, 
     MediaStore.MediaColumns.MIME_TYPE }; 
3

si dispone di più scelta per ottenere l'estensione di lima: come:

1- String filename = uri.getLastPathSegment(); vedono questo link

2 è possibile utilizzare questo codice anche

filePath .substring(filePath.lastIndexOf(".")+1); 

ma questo non va bene aproch.

a 3 se si dispone di URI del file, quindi utilizzare questo codice

String[] projection = { MediaStore.MediaColumns.DATA, 
    MediaStore.MediaColumns.MIME_TYPE }; 

4-se avete URL quindi utilizzare questo codice

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

Grazie funziona per me –

5

So che è piuttosto tardi, ma per chi ancora avere un problema quando getContentResolver(). getType (uri) restituisce null quando il percorso contiene spazi bianchi. Questo risolve anche il problema quando un'immagine viene aperta tramite File Manager invece di galleria. Questo metodo restituisce l'estensione del file (jpg, png, pdf, epub ecc.).

public static String getMimeType(Context context, Uri uri) { 
    String extension; 

    //Check uri format to avoid null 
    if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) { 
     //If scheme is a content 
     final MimeTypeMap mime = MimeTypeMap.getSingleton(); 
     extension = mime.getExtensionFromMimeType(context.getContentResolver().getType(uri)); 
    } else { 
     //If scheme is a File 
     //This will replace white spaces with %20 and also other special characters. This will avoid returning null values on file name with spaces and special characters. 
     extension = MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new File(uri.getPath())).toString()); 

    } 

    return extension; 
} 
+0

String mimeType = context.getContentResolver(). GetType (uri); // ottiene il valore: "image/jpg"; String extension = MimeTypeMap.getSingleton(). GetExtensionFromMimeType (mimeType); // get null – gelosie

+0

Girare un file Uri su un file e poi su un Uri è un po 'ridondante. –

3
getContentResolver().getType(theReceivedUri); 

È possibile che questo frammento si ottiene il tipo come "media/formato"

Problemi correlati