我正在运行context.startActivity(intent);
,我的意图如下:
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)
这至少发生在现场的两台设备上,其中一台是三星Galaxy S5,因此,我怀疑没有应用处理意图,因为用户至少安装了三星Gallery应用程序..我知道我可以处理异常并显示错误,但这不是一个真正的解决方案..
答案 0 :(得分:2)
嗯,我正在运行context.startActivity(intent);我的意图是这样的:
FLAG_GRANT_READ_URI_PERMISSION
在这里没用。这仅适用于Uri
来自ContentProvider
。的情况
我怀疑没有应用来处理意图,因为用户至少安装了三星图库应用
设备可能有该应用。 用户可能不会。请记住,在Android 4.2+平板电脑和Android 5.0+手机上,设备可能有多个用户。其中一些用户可能是受限制的帐户",他们只能访问列入白名单的应用。
请不要认为所有用户都可以访问可以下载和查看图像的应用。
此外,我不会假设任何"三星图库应用"将必然支持http
作为计划。
我知道我可以处理异常并显示错误,但这不是一个真正的修复
如果您不想显示错误,请将您自己的图片查看器实现为后备。
答案 1 :(得分:0)
执行此检查很重要,因为如果使用无应用程序无法处理的意图调用startActivity(),您的应用程序将崩溃。因此,只要结果不为null,就可以安全地使用intent。
if (intent.resolveActivity(getPackageManager()) != null) {
context.startActivity(intent);
}else{ Toast.makeToast(context, "No application found on device to open view", Toast.LENGTH_SHORT).show()}