Android 调用系统分享功能

Updated on with 2,062 views

一般情况下,分享都是调用第三方的SDK,比如极光、友盟等,或者调用各个目标应用的SDK,比如QQ、微信等,但是Android系统自带一个功能更加强大的分享功能。

简单的数据的分享

发送文本内容

Android Sharesheet 最直接也是最常见的用法是将文本内容从一个 Activity 发送到另一个 Activity。例如,大多数浏览器都可以将当前显示的网页的网址以文本形式与另一个应用分享。这对于通过电子邮件或社交网络与朋友分享文章或网站很有用。下面举例说明如何执行此操作:
kotlin

val sendIntent: Intent = Intent().apply {
        action = Intent.ACTION_SEND
        putExtra(Intent.EXTRA_TEXT, "This is my text to send.")
        type = "text/plain"
    }
    startActivity(sendIntent)

java

Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
    sendIntent.setType("text/plain");

    startActivity(sendIntent);

发送二进制内容(一般是图片等)

您可以使用 ACTION_SEND 操作分享二进制数据。应设置适当的 MIME 类型,并在 extra EXTRA_STREAM 中添加数据的 URI。这通常用于分享图片,但也可以用于分享任何类型的二进制内容:
kotlin

// uriToImage 是image的uri,需要将path转为uri,Uri.parse(path)

val shareIntent: Intent = Intent().apply {
        action = Intent.ACTION_SEND
        putExtra(Intent.EXTRA_STREAM, uriToImage)
        type = "image/jpeg"
    }

    startActivity(shareIntent)

java

// uriToImage 是image的uri,需要将path转为uri,Uri.parse(path)

Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
    shareIntent.setType("image/jpeg");

    startActivity(shareIntent);

使用正确的 MIME 类型

您应该为要发送的数据提供最具体的 MIME 类型。例如,分享纯文本时,应使用 text/plain。以下是在 Android 中发送简单数据时一些常用的 MIME 类型。

  • text/plaintext/rtftext/htmltext/json,接收方应注册 text/*
  • image/jpgimage/pngimage/gif,接收方应注册 image/*
  • video/mp4video/3gp,接收方应注册 video/*
  • application/pdf,接收方应注册支持的文件扩展名
  • 您可以使用 MIME 类型的 */*,但强烈建议您不要这样做,因为它仅与能够处理通用数据流的 Activity 匹配。

Android Sharesheet 可能会根据提供的 MIME 类型显示内容预览。某些预览功能仅适用于特定类型。

分享到指定的App

kotlin

val sendIntent: Intent = Intent().apply {
`package` = "目标App包名"
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, "This is my text to send.")
type = "text/plain"
}
startActivity(sendIntent)

java

Intent sendIntent = new Intent();
sendIntent.setPackage("目标App包名");
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");

startActivity(sendIntent);


标题:Android 调用系统分享功能
作者:yanjing
地址:https://yanjingtp.cn/articles/2022/02/23/1645546460939.html