【发布时间】:2016-06-28 10:44:06
【问题描述】:
这是我在设备上调用图像编辑应用程序的隐含意图:
startActivity(new Intent(Intent.ACTION_EDIT).setDataAndType(myUri,
getMimeType(myUri)).setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION));
这就是我获取MimeType 的方式:
public String getMimeType(Uri uri) {
String mimeType = null;
if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
ContentResolver cr = getContentResolver();
mimeType = cr.getType(uri);
} else {
String fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri
.toString());
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
fileExtension.toLowerCase());
}
return mimeType;
}
对于某些应用,加载时会崩溃:
在应用程序Sketch_Camera 上,只有一个不可见的页面会加载并禁用与我的应用程序的交互。
在应用程序AirBrush 上,它会加载应用程序,但会因“加载图像失败”消息而崩溃。
是否与我的最低 sdk 版本有关,因为我的是 16? 我也在 9 的最低 sdk 版本上对此进行了测试,结果没有变化。
还有什么我应该添加到这个意图以使用所有应用程序的吗?
我也尝试过 putExtra,但没有帮助:
.putExtra(Intent.ACTION_EDIT, myUri);
我的设备上有一些图库应用,它们都可以毫无问题地启动 Sketch_Camera 和 AirBrush。
这里发生了什么?经过两天与这种现象的斗争,我感到很困惑。
【问题讨论】:
-
myUri的值是多少?为什么您使用image/*而不是实际的 MIME 类型(因为它是 your 内容,所以 you 知道 MIME 类型是什么)? -
myUri 是来自图像文件的 uri >>
Uri.fromFile(myFile)为什么我使用image/*而不是实际的 MIME 类型?我从堆栈中拾取代码。现在我已经根据你的指南编辑了这个问题。但我仍然得到相同的结果。 -
"myUri 是来自图像文件的 uri" -- 这个文件在哪里?
Intent.FLAG_GRANT_READ_URI_PERMISSION和Intent.FLAG_GRANT_WRITE_URI_PERMISSION在这种情况下是无用的,因为它们与fileUri值无关。 -
"这个文件在哪里?"它是通过查询
MediaStore.Images.Media.EXTERNAL_CONTENT_URI从一个媒体存储文件的路径创建的文件
标签: android android-intent edit android-implicit-intent