将图像共享到其他应用程序的通用方式

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 失败)

是否可以将文本、图像和文件共享到使用 Nativescript 编写的 Android 或 iOS 应用程序中?

将文件共享到任何可能的应用程序的 iOS 原生方式

无法将图像发送到其他应用程序,尝试远足、Messenger 和 Whatsapp