将图像共享到其他应用程序的通用方式
Posted
技术标签:
【中文标题】将图像共享到其他应用程序的通用方式【英文标题】:Universal way to share images to other apps 【发布时间】:2017-08-31 14:46:12 【问题描述】:我正在开发一个可以将图像发送到其他应用程序的应用程序。 Nougat 发布后,我们应该使用FileProvider
。但我注意到这种方法并不普遍。对于早期版本的 android,我们应该使用 Uri.getUriFromFile()
方法。但是对于某些应用程序(即默认消息应用程序),使用 FileProvider
也不适用于 Nougat。是否有任何适用于所有应用程序的通用方法,或者我应该定义不能与FileProvider
一起使用的应用程序?
【问题讨论】:
“我正在开发一个可以将图像发送到其他应用程序的应用程序”——你的意思是ACTION_SEND
? “即默认消息应用”——大约有 20 亿台 Android 设备,分布在数千种设备型号中。没有单一的“默认消息应用程序”,而是几十个或数百个。
@CommonsWare 是的,我的意思是ACTION_SEND
。关于默认消息应用程序,我的意思是帮助发送彩信和短信的应用程序
【参考方案1】:
以下代码必须正常工作:
File file = new File(filePath);
Uri contentUri = FileProvider.getUriForFile(getContext(), "com.example.fileprovider", file);
if (contentUri != null)
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // temp permission for receiving app to read this file
shareIntent.setDataAndType(contentUri, getContentResolver().getType(contentUri));
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
startActivity(Intent.createChooser(shareIntent, "Share image");
【讨论】:
主要是shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
?
不,这不是必需的参数。我在 API 21 及更低版本中使用过这段代码,它运行良好
奇怪。因为在我的情况下,它不适用于 Lollipop、Marshmallow 和 KitKat Android 版本上的某些设备。
如果您使用FileProvider
,则必须添加shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
,因为否则其他应用程序没有您的私有应用程序目录的读取权限,FileProvider
从中读取数据以上是关于将图像共享到其他应用程序的通用方式的主要内容,如果未能解决你的问题,请参考以下文章
android studio:需要加载随机图像和顶部随机文本,然后将它们保存为 jpeg 以与其他应用程序共享
将 Firebase 图像 URI 共享给其他应用时共享失败?
将可绘制图像正确共享到其他应用程序(在没有 FileProvider 的情况下将 PNG 共享到 Whatsapp 失败)