实现分享功能的几个办法
1.调用系统的分享功能
2.通过第三方SDK,如ShareSDK,友盟等
3.自行使用各自平台的SDK,比如QQ,微信,微博各自的SDK
这里就记录下第一种办法。
分享文本信息
-
Intent textIntent = new Intent(Intent.ACTION_SEND);
-
textIntent.setType("text/plain");
-
textIntent.putExtra(Intent.EXTRA_TEXT, "这是一段分享的文字");
-
startActivity(Intent.createChooser(textIntent, "分享"));
效果如下图:
分享文本信息
分享单张图片
-
String path = getResourcesUri(R.drawable.shu_1);
-
Intent imageIntent = new Intent(Intent.ACTION_SEND);
-
imageIntent.setType("image/jpeg");
-
imageIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(path));
-
startActivity(Intent.createChooser(imageIntent, "分享"));
分享多个文件
-
ArrayList<Uri> imageUris = new ArrayList<>();
-
Uri uri1 = Uri.parse(getResourcesUri(R.drawable.dog));
-
Uri uri2 = Uri.parse(getResourcesUri(R.drawable.shu_1));
-
imageUris.add(uri1);
-
imageUris.add(uri2);
-
Intent mulIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
-
mulIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
-
mulIntent.setType("image/jpeg");
-
startActivity(Intent.createChooser(mulIntent,"多文件分享"));
上面几个例子的效果都是一样的,创建一个选择器,让用户自己选择分享到哪里。
这里有一点得注意,就是通过这种方法进行分享,Intent传递的数据的Type(就是setType()方法)一定要控制好,不然会出错。(至于为什么后面说)。
其中由于是分享的res中的图片,故转变为uri,方法在这:
-
private String getResourcesUri(@DrawableRes int id) {
-
Resources resources = getResources();
-
String uriPath = ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
-
resources.getResourcePackageName(id) + "/" +
-
resources.getResourceTypeName(id) + "/" +
-
resources.getResourceEntryName(id);
-
Toast.makeText(this, "Uri:" + uriPath, Toast.LENGTH_SHORT).show();
-
return uriPath;
-
}
指定分享到微信
-
Intent wechatIntent = new Intent(Intent.ACTION_SEND);
-
wechatIntent.setPackage("com.tencent.mm");
-
wechatIntent.setType("text/plain");
-
wechatIntent.putExtra(Intent.EXTRA_TEXT, "分享到微信的内容");
-
startActivity(wechatIntent);
效果如下:
分享到微信
指定分享到QQ
-
Intent qqIntent = new Intent(Intent.ACTION_SEND);
-
qqIntent.setPackage("com.tencent.mobileqq");
-
qqIntent.setType("text/plain");
-
qqIntent.putExtra(Intent.EXTRA_TEXT, "分享到微信的内容");
-
startActivity(qqIntent);
效果如下:
分享到QQ
注意:文章省略了6.0的动态权限,与7.0的FileProvider的适配细节,请自行添加。
源码参考
KTools/app/src/main/java/com/jiangkang/ktools/share/ShareActivity.kt