2015-12-08 5 views
1

Я бегу и мое намерение выглядит следующим образом:ActivityNotFoundException при запуске android.intent.action.VIEW

Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    intent.setDataAndType(Uri.parse(uri), mimeType); 

URI в этой точке является строка http://remote.server.path/photo-12212324324.jpg

и MIMETYPE является image/jpeg

Вот пример исключения.

12-07 20:48:55.934: I/ActivityManager(633): START u0 {act=android.intent.action.VIEW dat=http: typ=image/jpeg flg=0x1} from pid 1414 
12-07 20:48:55.964: W/dalvikvm(1414): threadid=1: thread exiting with uncaught exception (group=0x40cb5ba0) 
12-07 20:48:56.034: E/AndroidRuntime(1414): FATAL EXCEPTION: main 
12-07 20:48:56.034: E/AndroidRuntime(1414): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=http: typ=image/jpeg flg=0x1 } 
12-07 20:48:56.034: E/AndroidRuntime(1414):  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1760) 
12-07 20:48:56.034: E/AndroidRuntime(1414):  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1555) 
12-07 20:48:56.034: E/AndroidRuntime(1414):  at android.app.Activity.startActivityForResult(Activity.java:3431) 

Это происходит, по крайней мере, два устройства в этой области, один из которых является Samsung Galaxy S5, и поэтому, я сомневаюсь, что нет приложения для обработки намерения, как пользователь будет иметь по крайней мере установлено Samsung Gallery приложение .. Я знаю, что могу просто обработать исключение и показать ошибку, но на самом деле это не проблема.

+0

Возможно, это поможет вам: http://stackoverflow.com/questions/5882656/no-activity-found-to-handle-intent-android-intent-action-view –

+0

Видел, что это не помогло. Но все равно спасибо! – vkislicins

ответ

0

Выполнение этой проверки важно, потому что если вы вызываете startActivity(), используя намерение, которое ни одно приложение не может обрабатывать, ваше приложение сбой. Таким образом, пока результат не является нулевым, безопасно использовать намерение.

if (intent.resolveActivity(getPackageManager()) != null) { 
     context.startActivity(intent); 
    }else{ Toast.makeToast(context, "No application found on device to open view", Toast.LENGTH_SHORT).show()} 
+0

yes Я получаю это и завершу код, чтобы избежать сбоя, однако это все еще не объясняет, почему Samsung S5 не может справиться с намерением. – vkislicins

+0

Поскольку устройство S5, которое вы используете, не имеет приложения, предназначенного для обработки результата с вашего намерения. – Ishan

+0

Например, я удаляю все приложение камеры с моего телефона и запускаю Intent takePictureIntent = new Intent (MediaStore.ACTION_IMAGE_CAPTURE); он будет разбиваться – Ishan

2

Я бегу context.startActivity (намерения); и мои намерения выглядят так:

Um, FLAG_GRANT_READ_URI_PERMISSION здесь бесполезно. Это происходит только тогда, когда ваш Uri исходит от ContentProvider.

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

устройство может иметь это приложение. Пользователь не может. Пожалуйста, имейте в виду, что на планшетах Android 4.2 и Android 5.0+ на устройстве может быть несколько пользователей. Некоторые из этих пользователей могут быть «ограниченными учетными записями», где они имеют доступ только к набору приложений с белым списком.

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

Кроме того, я бы не стал предполагать, что независимо от того, что «приложение Samsung Gallery» обязательно будет поддерживать http в качестве схемы.

Я знаю, что могу просто обработать исключение и показать ошибку, но это на самом деле не исправить

Реализовать свой собственный просмотрщик как запасной вариант, если вы не хотите, чтобы показать ошибку.

+0

Спасибо за ваш ответ. Этот метод также поддерживает провайдера контента Uri, следовательно, флаг. Приложение Gallery (по умолчанию) поддерживает http, по крайней мере, версию, установленную на Samsung S3 и S4. К сожалению, у меня нет S5 для тестирования, но я думаю, что можно с уверенностью предположить, что это похоже. Я согласен с тем, что в целом я не должен предполагать, что пользователь может открыть изображение и реализовать свой собственный медиа-просмотрщик, однако я хотел проверить, что что-то не так с моим кодом, или кто-то еще видел подобное поведение, которое я нашел странным. – vkislicins

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