ACTION_SEND


sky-mxc 总结 转载注明:https://sky-mxc.github.io


不使用第三方 SDK 实现简单分享

现在在Android系统中进行分享,主要有两种手段,一种是通过系统自带的来启动分享功能;第二种是通过第三方的SDK插件进行分享;今天先来看看系统自带的分享功能:Intent.ACTOIN_SEND;

  • 分享文本
  • 分享图片+文本 (QQ和微信不支持,只能将图片和文本分两次分享,目前来看只有新浪微博支持)
  • 分享多图片 (和上面一样 ,目前只有新浪微博可以同时分享图片和文本)
  • 分享图片+文本至微信朋友圈
  • 检查是否有intent要启动的activity

分享存文本内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void share() {
/**
* 简单分享
* 让用户去选择分享平台
* 只分享简单的文子
*/
String context = etContext.getText().toString();
intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,context);
if(hasApplication(intent)){
//没有默认选项 可以自定义dialog标题
startActivity(Intent.createChooser(intent,"分享一下"));
//系统默认主题
// startActivity(intent);
}
}

在分享之前可以先查看一下手机上是否有分享平台,如果没有就给出提示可以增加用户友好度,通过 PackageManager的queryIntentActivities()查看是否有匹配intent的Activity

1
2
3
4
5
6
7
8
9
10
11
12
/**
* 判断是否存在intent要启动的Activity
* @param intent
* @return
*/
private boolean hasApplication(Intent intent){
//查询是否有该intent要启动的Activity
List<ResolveInfo> resolveInfos= getPackageManager().queryIntentActivities(intent,0);
log(resolveInfos.size()+"");
return resolveInfos.size()>0?true:false;
}

另外 使用 Intent.createChooser()可以避免出现默认程序的可能,还可以定义弹出框的标题 ,友好程度更好一些,下面看一下两者的区别

系统默认的主题( startActivity(intent))
系统默认
使用 Intent.createChooser()
Intent.createChooser()


分享文本+图片

图片和文本一起分享 目前我测试的只有微博好使 ,QQ和微信 都只能分享图片,不接受文本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 分享图片 和文本
* QQ 微信 不能图片和文本一起分享
* 微博可以实现图片和文本一起分享
*/
private void shareChooser() {
String context = etContext.getText().toString();
intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_TEXT,context);
intent.putExtra(Intent.EXTRA_STREAM,uri);
if (hasApplication(intent)){
startActivity(Intent.createChooser(intent,"选择要分享到的平台吧"));
}
}


分享多张图片

和上面一样 我测试 只有微博能同时分享图片和文本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 分享多个图片
* 目前来看 只有微博能同时分享文本和内容
*/
private void sharePhototMult() {
ArrayList<Uri> uris =new ArrayList<>();
uris.add(uri);
uris.add(uri);
intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_TEXT,"分享内容测试");
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,uris);
if(hasApplication(intent)){
startActivity(Intent.createChooser(intent,"选择分享平台"));
}
}

分享 图片+文本到微信朋友圈

这个方式可以实现 图片+ 文本同时分享

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 分享图片去微信朋友圈
*/
private void sharePhotoToWX() {
String wxPackage = "com.tencent.mm";
if (checkPackage(wxPackage)){
intent = new Intent(Intent.ACTION_SEND);
intent.setClassName(wxPackage,"com.tencent.mm.ui.tools.ShareToTimeLineUI");
intent.setType("image/*");
intent.putExtra("Kdescription","朋友圈分享测试");
intent.putExtra(Intent.EXTRA_STREAM,uri);
startActivity(intent);
}else{
Toast.makeText(this,"微信不存在",Toast.LENGTH_SHORT).show();
}
}

检查是否有隐式intent要启动的activity

有时候使用 隐式分享 ,并不知道是否存在分享平台 ,就可以通过以下代码测试

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 判断是否存在intent要启动的Activity
* @param intent
* @return
*/
private boolean hasApplication(Intent intent){
//查询是否有该intent要启动的Activity
List<ResolveInfo> resolveInfos= getPackageManager().queryIntentActivities(intent,0);
log(resolveInfos.size()+"");
return resolveInfos.size()>0?true:false;
}
坚持原创技术分享,您的支持将鼓励我继续创作!