一般情况下,分享都是调用第三方的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 类型。例如,分享纯文本时,应使用 text/plain
。以下是在 Android 中发送简单数据时一些常用的 MIME 类型。
text/plain
、text/rtf
、text/html
、text/json
,接收方应注册 text/*
image/jpg
、image/png
、image/gif
,接收方应注册 image/*
video/mp4
、video/3gp
,接收方应注册 video/*
application/pdf
,接收方应注册支持的文件扩展名*/*
,但强烈建议您不要这样做,因为它仅与能够处理通用数据流的 Activity 匹配。Android Sharesheet 可能会根据提供的 MIME 类型显示内容预览。某些预览功能仅适用于特定类型。
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);