2012-03-18 1 views
15

Я хочу получить в качестве строки расширение изображения (например, «jpg», «png», «bmp» ecc.) Изображений, загруженных из галереи или выбрали из камеры.Получить расширение файла из изображений, выбранных из галереи или камеры, как строка

Я использовал метод в такой форме, чтобы загрузить изображения из галереи

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

ответ

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

или

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

Где я должен поставить этот код точно ?? – AndreaF

+0

после String filePath = cursor.getString (columnIndex); –

+0

Я пробовал без успеха ... что такое «strname» ?? Не могли бы вы дать мне более подробную информацию о методе, который я использовал ?? Благодарю. – AndreaF

0

если вы получаете content://media Юриса как результат, и вы хотите, расширение, то вы должны запросить базу данных, как вы делаете, и извлечь, если от filePath. Например. с this

Чтобы получить имя файла из полного пути самое простое решение

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

Я думаю, что это должно заставить вас, где вы хотите (я не пробовал, только что прочитал немного вокруг и Я думаю, что это работает).

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

Нет (по крайней мере, довольно точно). 'MediaStore.Images.Media.DISPLAY_NAME' имеет имя файла без расширения. Единственное место в этой базе данных, которое включает расширение, - «MediaStore.Images.Media.DATA» – zapl

+0

«Поток данных для файла», хм? Тогда документация дрянная. –

+1

meh, я ошибаюсь. DISPLAY_NAME имеет добавочный номер, TITLE - это столбец, в котором он удален - только что отмечен в db. В DATA у вас есть полный путь. – zapl

0

Я думаю, что это должно использовать MediaStore.MediaColumns.MIME_TYPE

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

у вас есть множественный выбор, чтобы получить расширение файла: как:

1- String filename = uri.getLastPathSegment(); увидеть это link

2- вы можете использовать этот код также

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

, но это не хорошо aproch.

3-если у вас есть URI файла, то используйте этот код

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

4-если у вас есть URL, то используйте этот код

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

Спасибо, что работа для меня –

5

Я знаю, что это довольно поздно, но для тех, кто еще имеют проблему, когда getContentResolver(). getType (uri) возвращает null, когда путь содержит пробелы. Это также решает проблему, когда изображение открывается через диспетчер файлов вместо галереи. Этот метод возвращает расширение файла (jpg, png, pdf, epub и т. Д.).

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); // получить значение: «image/jpg»; Строковое расширение = MimeTypeMap.getSingleton(). GetExtensionFromMimeType (mimeType); // get null – gelosie

+0

Включение файла Uri в файл, а затем в Uri снова немного избыточно. –

3
getContentResolver().getType(theReceivedUri); 

выше фрагмент кода получает вас тип как "медиа/формат"

Смежные вопросы