现在在Android系统中进行分享,主要有两种手段,一种是通过系统自带的来启动分享功能;第二种是通过第三方的SDK插件进行分享;今天先来看看系统自带的分享功能:Intent.ACTOIN_SEND;
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
/**
* 判断是否存在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()
图片和文本一起分享 目前我测试的只有微博好使 ,QQ和微信 都只能分享图片,不接受文本
/**
* 分享图片 和文本
* 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,"选择要分享到的平台吧"));
}
}
和上面一样 我测试 只有微博能同时分享图片和文本
/**
* 分享多个图片
* 目前来看 只有微博能同时分享文本和内容
*/
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,"选择分享平台"));
}
}
这个方式可以实现 图片+ 文本同时分享
/**
* 分享图片去微信朋友圈
*/
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
* @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;
}