2015-12-28 8 views
4

Я использую следующий код, чтобы выбрать изображение или видео из галереи:Определить в onActivityResult, если изображение было выбрано из галереи или видео было выбрано - Android

imgGallery.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Intent pickPhoto = new Intent(Intent.ACTION_GET_CONTENT); 
        pickPhoto.setType("*/*"); 
        String[] mimetypes = {"image/*", "video/*"}; 
        pickPhoto.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); 
        startActivityForResult(pickPhoto, 
          SELECT_PICTURE_OR_VIDEO); 
       } 
      }); 

Пожалуйста, обратите внимание, я использую ту же кнопку для изображения или видео выбор. Итак, когда будет вызываться onActivityResult, есть ли какой-либо способ, из которого я могу знать, что было выбрано изображение или выбрано видео из галереи?

+0

вы можете проверить типы пантомимы в onActivityResult ?? –

+0

@VivekMishra: Я искал это, но я его нигде не нашел. – rahul

ответ

1

Вы можете уточнить нижеследующий код.

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK && data.getData() != null) { 
     String path = data.getData().getPath(); 
     if (path.contains("/video/")) { 
      Log.d(this.getClass().getName(), "Video"); 
     } else if (path.contains("/images/")) { 
      Log.d(this.getClass().getName(), "Image"); 
     } 
    } 
} 

Это будет работать, безусловно, потому что путь, который мы получим что-то вроде я не нашел ничего, кроме этого, это будет работать, безусловно, потому что путь он возвращает что-то вроде этого /external/images/media/2928, где мы не получим какой-либо повторяющиеся данные. Поскольку URI здесь содержит только идентификатор изображения в базе данных хранилища данных Android.

+0

Да, у меня это было в голове, но если у какого-то имени изображения есть какая-то строка, например, «видео», то это будет считаться видео, не так ли? – rahul

+0

Думаю, теперь код будет работать нормально –

+0

Да Теперь я думаю, что у него не будет никаких проблем. Но все же это выглядит как работа. Я имею в виду отсутствие полного доказательства, которое у нас есть? что-то вроде получения типа mime из данных, чтобы узнать, будет ли его изображение или видео – rahul

0

Вы можете обнаружить, что ли изображение или видео .Я попробовал ваш код из startActivityForResult с моим, и я был в состоянии обнаружить, если выбранное изображение или видео вот что я сделал

public void onClick(View v) { 
      Intent pickPhoto = new Intent(Intent.ACTION_GET_CONTENT); 
      pickPhoto.setType("*/*"); 
      String[] mimetypes = {"image/*", "video/*"}; 
      pickPhoto.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes); 
      startActivityForResult(pickPhoto, 1); 

это такое же, как у вас

и в OnActivityResult я добавил не condition.Simply как этого

public void onActivityResult(int i,int j, Intent intent) { 
     super.onActivityResult(i, j, intent); 
} 

и когда я отладка для значения в умысле I получил это: при выборе изображения

Intent { dat=content://com.android.providers.media.documents/document/image:211660 flg=0x1 } 

и когда видео выбран

Intent { dat=content://com.android.providers.media.documents/document/video:169729 flg=0x1 } 

Здесь вы можете увидеть его легко идентифицировать, что это selected.No работа вокруг для этого необходимо

1

Использование пути, предложенного другими ответами, здесь не лучший способ сделать это, потому что нет никакой гарантии, что путь всегда будет содержать слова images/video во всех версиях Android на всех устройствах навсегда.

Вместо попробовать использовать Content Разрешитель получить тип MIME-тип:

ContentResolver cr = mContext.getContentResolver(); 
String mime = cr.getType(uri); 

Вы можете использовать его как этот

public void onActivityResult(int requestCode, int resultCode, Intent mediaReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, mediaReturnedIntent); 

    Uri selectedMedia = mediaReturnedIntent.getData(); 
    ContentResolver cr = mContext.getContentResolver(); 
    String mime = cr.getType(selectedMedia); 
    if(mime.toLowerCase().contains("video")) { 
     // Do something with the video 
    } else if(mime.toLowerCase().contains("image")) { 
     // Do something with the image 
    } 
}