共享图像的正确方法(使用意图)

2024-04-24

我在应用程序中创建图像,并希望共享这些社交网络 (facebook)、邮件应用程序 (gmail) 以及其他可以“接收”图像的应用程序。

问题的根源(我认为)是我不想使用外部存储作为图像的基础。我想使用我的数据文件夹或缓存文件夹,因为它们都不需要任何访问权限。

我用来将图像写入文件的代码(并且我指定MODE_WORLD_READABLE以便其他应用程序可以读取它们):

FileOutputStream fos = null;
try {
    fos = context.openFileOutput("image.jpg", Context.MODE_WORLD_READABLE);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
} finally {
    if (fos != null)
        fos.close();
}

这是我分享图像的代码:

File internalFile = context.getFileStreamPath("image.jpg");

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(internalFile));
intent.setType("image/jpeg");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

context.startActivity(Intent.createChooser(intent, "share"));

这个解决方案非常简单,并且适用于 facebook 等应用程序,但是not例如 gmail 失败并显示:

file:// attachment paths must point to file:///mnt/sdcard

有许多“技巧”(见下文)可以让它与 gmail 一起使用,但我让我问自己是否有更好的方法来共享无需技巧的图像,这是我忽略的。那么,对于问题:

  • 分享图像的最佳方式是什么? (外置储存?)
  • 还有其他应用程序的行为(错误)与 Gmail 类似吗? (我发现 google+ 有一些问题)
  • 如果没有其他办法的话:我可以编写特殊意图以共享到特定应用程序吗?当用户在我的监视列表中选择应用程序时,我有默认的共享方式并覆盖它吗?

Hacks

  1. Using a 路径破解 http://stephendnicholas.com/archives/974#comment-127只需指向Uri to:

    文件:///mnt/sdcard/../../my/package/name/...

    这个解决方案感觉不对。

  2. Using a ContentProvider如上所述here http://stephendnicholas.com/archives/974。但引用了链接中的内容:

    警告:帖子中描述的方法适用于 Gmail,但显然与其他 ACTION_SEND 处理程序(例如 MMS 编辑器)存在一些问题。

    (问题:它使 MMS 编辑器崩溃)


您尝试过 ParecelableFileDescriptor 吗?

http://developer.android.com/reference/android/os/ParcelFileDescriptor.html http://developer.android.com/reference/android/os/ParcelFileDescriptor.html

创建与static ParcelFileDescriptor open(File file, int mode, Handler handler, ParcelFileDescriptor.OnCloseListener listener)创建一个访问给定文件的新 ParcelFileDescriptor。static ParcelFileDescriptor open(File file, int mode) Create a new ParcelFileDescriptor accessing a given file.

接收端是这样的:使用 Android DownloadManager 从包文件描述符返回输入流 https://stackoverflow.com/questions/8001274/returning-an-input-stream-from-parcel-file-descriptor-using-androids-downloadman

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

共享图像的正确方法(使用意图) 的相关文章

随机推荐

  • Swift 崩溃日志中的“Arg = Exploded”是什么意思? [复制]

    这个问题在这里已经有答案了 我从 Crashlytics Fabric 收到崩溃日志 内容如下 function signature specialization
  • 是否可以在新的密钥库中安装现有的私钥和 ssl 证书?

    我们在服务器故障期间丢失了用于生成 CSR 的原始密钥库 我们有私钥 key 文件 和原始 CSR csr 文件 的备份 是否可以用这些重建密钥库 由于创建证书链的所有说明都需要原始密钥库 这适用于 Tomcat 7 0 27 Thanks
  • 切换分支时发生致命 Git 错误

    错误信息 致命 git checkout 更新路径与切换分支 强制不兼容 如何解决这个 Git 签出错误 通过明确指定 git checkout HEAD blah 而不是仅仅说 git checkout blah 假设您确实想查看文件 然
  • Android 创建 JSON 对象的 JSON 数组

    您好 有谁知道如何创建一个包含对象的数组 每个对象中都包含多个对象 我似乎无法理解它 结构应该是这样的 Array object subobject subobject object subobject subobject 这是我到目前为止
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re
  • i18next 翻译问题

    我仍然尝试使用 i18next 来翻译我的 jQuery 应用程序 解决了一些一般问题后 此处解决 如何使用i18next 翻译问题 https stackoverflow com questions 13005791 how to use
  • 在后台从 url 加载一个大 plist

    我从 url 加载一个大的 plist 文件 我必须等待几秒钟才能使用该应用程序 有什么解决办法吗 如何在后台加载它 是GCD我需要的 如何实施 My code NSString urlStr NSString alloc initWith
  • 带猫头鹰旋转木马的 Fancybox (lazyLoad)

    我正在使用带有lazyLoad选项的Fancybox v3 5 4和Owl carousel v2 3 4 当我们点击照片时 Fancybox 就会弹出照片 然后 如果我们点击几次 下一步 以获取 Fancybox 上的下一张照片 然后关闭
  • Java:URLConnection合理的超时时间

    默认情况下 URLConnection 的超时时间为 0 无限制 XXXXX 的合理值是多少 URL url URLConnection uCon url openConnection uCon setConnectTimeout XXXX
  • 在 O(n) 时间和 O(1) 空间中生成数组的随机排列

    我们必须生成数组 1 2 3 n in O 1 space 我能够做到O n space I did O n 空间解决方案 首先存储数组 然后将其随机化 但是如何在不存储数组的情况下做到这一点O 1 space 我只是生成随机数 而不是存储
  • 随着新数据的出现,如何增量训练 FANN?

    我使用 FANN 库构建并训练了一个神经网络 这是初步培训 大部分数据将在线收集 当在线数据可用时我想要improve使用这些新数据的网络 不是重新训练 而是使之前的训练更加准确 如何用FANN来做这种增量训练呢 从更改为的文件进行训练 s
  • Flask - POST 错误 405 方法不允许

    我刚刚开始学习 Flask 我正在尝试创建一个表单 该表单将允许POST method 这是我的方法 app route template methods GET POST def template if request method PO
  • 这是一个可以将括号中的文本与嵌套括号匹配的正则表达式[重复]

    这个问题在这里已经有答案了 我需要一些帮助来编写一个正则表达式 该正则表达式将括号中的字符串与嵌套括号匹配并以模式开头 注意 父 括号中的文本可以没有嵌套括号 例子 Some text pattern SOME TEXT THAT I WA
  • 如何在python中更改ttk.progressBar颜色

    有谁知道如何更改 ttk progressBar 的颜色 它现在显示绿色 我希望它是蓝色的 import ttk self progressBar ttk Progressbar frame3 length 560 maximum 100
  • Bigquery - json_array 来自字段的额外多个元素

    我的表有一个 JSON 字段 如下所示 每个条目中可以有任意数量的评论 entry 1234 comment 6789 seconds 1614864327 nanoseconds 606000000 message hello world
  • Pandas 数据框获取每组的第一行

    我有一只熊猫DataFrame像下面这样 df pd DataFrame id 1 1 1 2 2 3 3 3 3 4 4 5 6 6 6 7 7 value first second second first second first t
  • 在 OS Hardened 机器中使用 c# 禁用任务管理器

    我使用下面的代码来禁用完美运行的信息亭应用程序的任务管理器 public void DisableTaskManager RegistryKey regkey string keyValueInt 1 string subKey Softw
  • 将数组 php 转换为 java

    我正在开发一个包含 java 文件和 php 文件的应用程序 java 文件调用 php 文件 这些文件在 ddbb 中执行查询并将结果作为数组 php 返回 但将其打印在屏幕上 我在java中把它当作一个字符串 我必须将它转换为数组或集合
  • 将字符串 ascii 转换为字符串 Hex

    假设我有这个字符串 string str 1234 我需要一个函数将该字符串转换为该字符串 0x31 0x32 0x33 0x34 我在网上搜索了很多类似的东西 但没有找到这个问题的答案 string str 1234 char charV
  • 共享图像的正确方法(使用意图)

    我在应用程序中创建图像 并希望共享这些社交网络 facebook 邮件应用程序 gmail 以及其他可以 接收 图像的应用程序 问题的根源 我认为 是我不想使用外部存储作为图像的基础 我想使用我的数据文件夹或缓存文件夹 因为它们都不需要任何