Android 共享图片不起作用

2024-02-28

我正在尝试使用以下代码共享应用程序的屏幕截图:

View content = findViewById(R.id.layoutHome);
content.setDrawingCacheEnabled(true);
Bitmap bitmap = content.getDrawingCache();

File sdCardDirectory = Environment.getExternalStorageDirectory();
File image = new File(sdCardDirectory,"temp.png");

// Encode the file as a PNG image.
FileOutputStream outStream;
try {
  outStream = new FileOutputStream(image);
  bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
  outStream.flush();
  outStream.close();
} catch (FileNotFoundException e) {
  e.printStackTrace();
} catch (IOException e) {
  e.printStackTrace();
}

String url = "file://" + sdCardDirectory.toString() + "Images/temp.png";

Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("image/*");
String shareBody = "Here is the share content body";
sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,"Subject Here");
sharingIntent.putExtra(android.content.Intent.EXTRA_STREAM, url);
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT,shareBody);
startActivity(Intent.createChooser(sharingIntent, "Share via"));

Logcat:

10-10 14:20:16.631: W/Bundle(16349): Key android.intent.extra.STREAM expected Parcelable but value was a java.lang.String.  The default value <null> was returned.
10-10 14:20:16.658: W/Bundle(16349): Attempt to cast generated internal exception:
10-10 14:20:16.658: W/Bundle(16349): java.lang.ClassCastException: java.lang.String cannot be cast to android.os.Parcelable
10-10 14:20:16.658: W/Bundle(16349):    at android.os.Bundle.getParcelable(Bundle.java:1171)
10-10 14:20:16.658: W/Bundle(16349):    at android.content.Intent.getParcelableExtra(Intent.java:4140)
10-10 14:20:16.658: W/Bundle(16349):    at android.content.Intent.migrateExtraStreamToClipData(Intent.java:6665)
10-10 14:20:16.658: W/Bundle(16349):    at android.content.Intent.migrateExtraStreamToClipData(Intent.java:6650)
10-10 14:20:16.658: W/Bundle(16349):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1410)
10-10 14:20:16.658: W/Bundle(16349):    at android.app.Activity.startActivityForResult(Activity.java:3351)
10-10 14:20:16.658: W/Bundle(16349):    at android.app.Activity.startActivityForResult(Activity.java:3312)
10-10 14:20:16.658: W/Bundle(16349):    at android.app.Activity.startActivity(Activity.java:3522)
10-10 14:20:16.658: W/Bundle(16349):    at android.app.Activity.startActivity(Activity.java:3490)
10-10 14:20:16.658: W/Bundle(16349):    at com.example.simplegraph.EconActivity$DrawerItemClickListener.onItemClick(EconActivity.java:182)
10-10 14:20:16.658: W/Bundle(16349):    at android.widget.AdapterView.performItemClick(AdapterView.java:298)
10-10 14:20:16.658: W/Bundle(16349):    at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
10-10 14:20:16.658: W/Bundle(16349):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2855)
10-10 14:20:16.658: W/Bundle(16349):    at android.widget.AbsListView$1.run(AbsListView.java:3529)
10-10 14:20:16.658: W/Bundle(16349):    at android.os.Handler.handleCallback(Handler.java:615)
10-10 14:20:16.658: W/Bundle(16349):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-10 14:20:16.658: W/Bundle(16349):    at android.os.Looper.loop(Looper.java:137)
10-10 14:20:16.658: W/Bundle(16349):    at android.app.ActivityThread.main(ActivityThread.java:4745)
10-10 14:20:16.658: W/Bundle(16349):    at java.lang.reflect.Method.invokeNative(Native Method)
10-10 14:20:16.658: W/Bundle(16349):    at java.lang.reflect.Method.invoke(Method.java:511)
10-10 14:20:16.658: W/Bundle(16349):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
10-10 14:20:16.658: W/Bundle(16349):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
10-10 14:20:16.658: W/Bundle(16349):    at dalvik.system.NativeStart.main(Native Method)

问题:当我尝试与 Gmail 共享时,Gmail 被强制关闭。当我尝试与 Facebook 分享时,Facebook 默默地拒绝了该帖子。消息功能会调出Messenger,但内容是空的。共享作品无需添加图像。


首先,永远不要使用串联来构建文件路径,更不用说Uri values.

Second, EXTRA_STREAM应该持有一个Uri, not a String.

第三,既然您知道正确的 MIME 类型(image/png),使用它代替通配符。

第四,不要重复修建同一条路。在这里你创建File image正确的方法,然后忽略该值。

所以,转储String url线,替换image/* with image/png,并修改:

sharingIntent.putExtra(android.content.Intent.EXTRA_STREAM, url);

to be:

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

Android 共享图片不起作用 的相关文章

随机推荐

  • 如何解决grpc Deadline Exceeded错误?

    我有用go和python客户端编写的grpc服务器 有时会出现如下错误 eggs grpcio 1 0 0 py2 7 linux x86 64 egg grpc channel py line 432 in end unary respo
  • 读取spark中的字节列

    我有一个数据集 其中包含一个未知 且不友好 编码的 ID 字段 我可以使用普通 python 读取单列 并验证多个数据集中的值是否不同且一致 即它可以用作连接的主键 当使用加载文件时spark read csv 似乎 Spark 正在将列转
  • 大型 Maven 项目的存储库布局

    我有一个大型应用程序 约 50 个模块 使用类似于以下的结构 Application Communication modules 彩色通讯模块 SSN通讯模块 通讯模块等 路由器模块 Service modules Voting servi
  • 如何从颤振中的流式响应中获取响应? [复制]

    这个问题在这里已经有答案了 我正在使用 flutter 开发一个应用程序 并使用 http 库来调用我构建的 api 我想发出一个多部分请求来发送文件 它也发送它 但我无法从服务器收到任何响应 因为返回的对象是 StreamResponse
  • 如何查找违反引用完整性的记录

    我有两个表应该处于一对多关系 但表的多侧似乎有一些记录阻止创建关系 违反引用完整性 由于两个表中都有很多记录 是否有一种方法可以查询哪些记录位于多侧 而不是一侧 Ex Table 1 one side pk AccountId Table
  • Clojure STM ( dosync ) x Java 同步块

    Clojure STM dosync 方法和Java同步块有什么区别 我正在阅读 睡觉的理发师 问题中的以下代码 http www bestinclass dk index clj 2009 09 scala vs clojure roun
  • 如何在 Django 中使用新数据库重新开始?

    我删除了我的数据库 我想用一个新的数据库重新开始 我怎样才能做到这一点 我尝试创建一个新的数据源 但在应用迁移 或迁移时出现错误 无法找到表 这是真的 因为它是一个空数据库 当有人提取我的代码版本时 也会出现类似的情况 他不会有迁移或数据库
  • RMagick + Rails + Heroku?

    我想弄清楚如何在我的应用程序上使用 rmagick 然后使其在 Heroku 上运行 对于 Rails3 您必须添加此规范 gem rmagick 2 12 0 require gt RMagick 注意 要求区分大小写
  • 序言中的谓词

    我需要在 prolog 中定义一个谓词 它将一个列表作为输入 对 gt 5 的数字的平方求和 并减去 这就是我目前所拥有的 pred 0 pred Head Tail Result gr85 Head pred Tail Total Res
  • 使用 scan!() 读取 u8 时出现“宏未定义”

    我读到有关读取整数输入的内容如何在 Rust 1 0 中读取用户输入的整数 https stackoverflow com questions 30355185 how to read an integer input from the u
  • 使用 Nuxt.js 进行开发和生产的不同 baseURL

    如何为开发和生产添加不同的baseURL 这是目前我的 nuxt config js module exports mode universal axios See https github com nuxt community axios
  • 为什么 Karma 配置文件排除选项不起作用?

    我的示例 Angular 应用程序中有两个规范文件 规格文件名称是src app app component spec ts src app app component two spec ts 我只想运行文件中的测试src app app
  • Sidekiq - 重新安排失败的作业

    我有一个后台工作 使用 Sidekiq 连接到我的另一个服务 如下所示 def perform id user ABCClient instance user id end 有时这个 ABCClient 会宕机 在这种情况下我想重新安排 执
  • 如何使用 Django-oauth-toolkit 进行身份验证,通过 Django-rest-framework 测试 API 端点

    我有一个 Django rest framework 视图集 路由器来定义 API 端点 视图集定义如下 class DocumentViewSet viewsets ModelViewSet permission classes perm
  • 如何检查 MongoDB 中的数组字段是否包含唯一值或另一个数组?

    我现在用的是mongodb 我有一个博客文章集 它有一个tags字段是一个数组 例如 blogpost1 tags tag1 tag2 tag3 tag4 tag5 blogpost2 tags tag2 tag3 blogpost3 ta
  • Android / 9-patch PNG:如果我需要像 11-patch PNG 这样的东西怎么办?

    在 Draw 9 patch 中 一切看起来都很好 However 我的 SDK 说 9 patch png 格式错误 因为我有类似 11 patch png 的东西 因为我不希望小抓取区域被缩放 如何让它发挥作用 截图描述了一切 控制台中
  • NodeJs:缓慢的 req.pipe

    我发现 tus 的服务器实现 https tus io https tus io 对于nodejs https github com tus tus node server https github com tus tus node ser
  • gevent 和 posgres:异步连接失败

    我正在使用 gevent 处理基于 Django 的 Web 系统上的 API I O 我已经使用以下方法进行了猴子补丁 import gevent monkey gevent monkey patch socket 我已经使用以下方法修补
  • Web、应用程序和移动编程之间的主要技术区别是什么?

    我想知道Web ASP PHP Ruby等 之间的主要技术区别是什么 应用程序 C C NET Java 和移动 J2ME Objective C 编程 这是最难的 如果有人学会了其中之一 他可以轻松地切换到其他之一吗 首先 从一个技术的从
  • Android 共享图片不起作用

    我正在尝试使用以下代码共享应用程序的屏幕截图 View content findViewById R id layoutHome content setDrawingCacheEnabled true Bitmap bitmap conte