android - 通过 Intent 为 WhatsApp、Telegram 等分享图像和链接

标签 android android-intent uri share

通过在网络上搜索,我发现有不止一种方法可以通过邀请他人下载来分享我的应用程序。

我尝试了这段有效的代码,向用户显示了应用选择器面板。

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "My subject");
intent.putExtra(Intent.EXTRA_TITLE, "My subject");
intent.putExtra(Intent.EXTRA_TEXT, "https://play.google.com/store/apps/details?id=" + BuildConfig.APPLICATION_ID);
startActivity(Intent.createChooser(intent, "Share App"));

当用户选择与 WhatsApp、Telegram、SMS、电子邮件等共享消息时,为了正确显示消息,我必须在 Intent 中包含哪些信息?

例如,此代码将在 Telegram 中显示预览(带有突出显示的链接和预览图像),但不会在 WhatsApp 中显示(它仅显示要作为消息发送的纯文本):为什么?

我也试过这段代码,但它适用于电报,但不适用于 Whatsapp(它发送的消息只有一个附件,无法打开文本“无标题”):

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TITLE, "title test");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "subject test");
String shareMessage= "message test\n\n";
shareMessage = shareMessage + "https://play.google.com/store/apps/details?id=" + BuildConfig.APPLICATION_ID +"\n\n";
shareIntent.putExtra(Intent.EXTRA_TEXT, shareMessage);
shareIntent.putExtra(Intent.EXTRA_HTML_TEXT, "HTML " + shareMessage);
Uri imageUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://"
        + res.getResourcePackageName(R.drawable.testjpg) + '/'
        + res.getResourceTypeName(R.drawable.testjpg) + '/'
        + res.getResourceEntryName(R.drawable.testjpg));
Toast.makeText(this, imageUri.toString(), Toast.LENGTH_LONG).show();
shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
shareIntent.setType("image/jpg");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, getString(R.string.share)));

如何使其适用于 WhatsApp、Telegram、FB、电子邮件和其他纯文本(如 SMS)?

最佳答案

What information must I include in the Intent in order to correctly display the message when the user chooses to share it with WhatsApp, Telegram, SMS, email, etc.?

“正确”的定义取决于其他应用程序的开发者,而不是您。他们如何处理您的 Intent 上的额外内容取决于他们,而不是您。他们对这些附加功能的处理方式会因应用程序、应用程序版本以及可能的设备/操作系统特性而异。你无法控制这些。您只需提供数据,然后让其他应用程序的开发人员使用这些数据做他们想做的事。

this code will show a preview in Telegram (with the highlighted link and a preview image) but not in WhatsApp (it show only the plain text to send as a message): why?

因为 Telegram 和 WhatsApp 的开发者选择这样做。

I tried also this code but it works for telegram but not for whatsapp

该代码中存在各种错误:

  • 您在 EXTRA_HTML_TEXT

    中提供的内容不是 HTML
  • image/jpg 不是有效的 MIME 类型(它是 image/jpeg)

  • 您的Uri 具有android.resource 方案,而不是content 方案

修复这些错误是否会改变 WhatsApp 的行为取决于 WhatsApp 的开发人员,而且据您所知,该行为可能会在接下来的一个小时内发生七次改变。因此,虽然我建议修复这些错误,但不要假设任何给定的应用程序必然会以不同的方式或以您想要的方式运行。

关于android - 通过 Intent 为 WhatsApp、Telegram 等分享图像和链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56952411/

相关文章:

c# - 在没有编码的 URI 模板中使用正斜杠 ('/' )

uri - Schema.org 对 JSON-LD 表示和 URI 的说明

Android - PullToRefresh ListView 始终为空

java - 有目的地将 Activity 放在首位

android - 提高我的最低 API 级别的更好方法?

Android:在不是 Activity 或 BroadcastReceiver 的类中威胁隐式 Intent

Android - 检测 Activity 是否因屏幕方向改变而启动

path - 那么Windows下路径斜杠(/或\)的正确方向是什么呢?

java - Imageview 未显示来自 URL 的正确图像

java - Android OpenGL ES 2.0,为每个三角形计算法线