2012-03-18 11 views
15

Quiero poner como cadena la extensión de imagen (por ejemplo, "jpg", "png", "bmp" ecc.) De las imágenes cargadas desde la galería o recogido de la cámara.Obtenga la extensión de archivo de imágenes seleccionadas de galería o cámara, como cadena

he utilizado un método en esta forma para cargar imágenes desde la galería

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; 
    } 
} 

Respuesta

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

o

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

¿Dónde debería poner este código exactamente? – AndreaF

+0

después de String filePath = cursor.getString (columnIndex); –

+0

Lo he intentado sin éxito ... ¿qué es exactamente "strname" ?? ¿Podría darme más detalles buscando el método que he usado? Gracias. – AndreaF

0

si obtiene content://media Uris como resultado y desea que la extensión entonces usted tiene que consultar la base de datos como lo hace y extraer si desde filePath. P.ej. con this

Para obtener el nombre de archivo de una ruta completa la solución más simple es

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

creo que esto se debe llegar a donde quiere (no he probado, simplemente leer un poco alrededor y Creo que funciona).

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 (al menos bastante seguro). 'MediaStore.Images.Media.DISPLAY_NAME' tiene el nombre de archivo sin extensión. El único lugar en esa base de datos que incluye la extensión es 'MediaStore.Images.Media.DATA' – zapl

+0

' La secuencia de datos para el archivo', ¿eh? Entonces la documentación es mala. –

+1

meh, estoy equivocado. DISPLAY_NAME tiene la extensión incluida, TITLE fue la columna donde se eliminó, solo se verificó en el archivo db. En DATA tienes la ruta completa. – zapl

0

creo que esto debería utilizar MediaStore.MediaColumns.MIME_TYPE

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

usted tiene opción múltiple para obtener la extensión del archivo: como:

1- String filename = uri.getLastPathSegment(); ver este link

2- Puede utilizar este código también

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

pero esto no es bueno aproch.

3-si tiene URI del archivo a continuación, utilizar este Código

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

4-si tiene URL a continuación, utilizar el código

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

Gracias funciona para mí –

5

Sé que es muy tarde, pero para los que todavía tiene un problema cuando getContentResolver(). getType (uri) devuelve null cuando la ruta contiene espacios en blanco. Esto también resuelve el problema cuando se abre una imagen a través del Administrador de archivos en lugar de la galería. Este método devuelve la extensión del archivo (jpg, png, pdf, epub, etc.).

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

Cadena mimeType = context.getContentResolver(). GetType (uri); // obtener valor: "image/jpg"; String extension = MimeTypeMap.getSingleton(). GetExtensionFromMimeType (mimeType); // obtener nulo – gelosie

+0

Convertir un archivo Uri en un archivo y luego en un Uri nuevamente es un poco redundante. –

3
getContentResolver().getType(theReceivedUri); 

El fragmento anterior se obtiene el tipo como "medios/formato"

Cuestiones relacionadas