2015-04-08 4 views
2

Итак, я пишу намерение, которое должно запустить галерею, чтобы просмотреть изображение, переданное в намерение с его Uri. Этот код работает отлично, делает именно то, что я хочу, чтобы это сделать:Android Intents - Разница между SetDataAndType и просто setData и setType?

private Intent makeGalleryIntent(String pathToImageFile) { 
    Intent mGalleryIntent = new Intent(Intent.ACTION_VIEW); 
    mGalleryIntent.setDataAndType(Uri.parse("file://" + pathToImageFile), "image/*"); 
    return mGalleryIntent; 
} 

Но когда я пытался играть с ним (как раз пробовать разные вещи, как я узнаю), этот код либо падает на эмуляторе, так как это может «т запустить камеру или просто тянет мою галерею на моем физическом устройстве:

private Intent makeGalleryIntent(String pathToImageFile) { 
    Intent mGalleryIntent = new Intent(Intent.ACTION_VIEW); 
    mGalleryIntent.setData(Uri.parse("file://" + pathToImageFile)); 
    mGalleryIntent.setType("image/*"); 
    return mGalleryIntent; 
} 

они оба выглядят, как они должны сделать то же самое. Кроме того, есть ли способ, которым я мог бы установить все это правильно, просто используя конструктор Intent?

+0

Отличный вопрос! У меня была именно эта проблема, и это действительно раздражает, вы думаете, что «набор» API не будет иметь глупых скрытых побочных эффектов. – ebyrob

ответ

8

Из документации: Intent Documentation

Чтобы установить только данные URI, вызовите УстановитьДанные(). Чтобы установить только тип MIME, вызовите setType(). При необходимости вы можете установить оба значения с помощью setDataAndType().

Внимание! Если вы хотите установить тип URI и MIME, не вызывайте setData() и setType(), потому что каждый из них аннулирует значение другого. Всегда используйте setDataAndType() для установки типа URI и MIME.

Ive никогда не получал ответа относительно того, почему они будут аннулировать друг друга. Если у вас есть идея, почему id любят это слышать!

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