前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ACTION_SEND

ACTION_SEND

作者头像
佛系编码
发布2018-05-22 11:46:24
1K0
发布2018-05-22 11:46:24
举报
文章被收录于专栏:Android学习之路Android学习之路

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

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

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

分享存文本内容

代码语言:javascript
复制
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

代码语言:javascript
复制
/**
 * 判断是否存在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()
Intent.createChooser()

分享文本+图片

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

代码语言:javascript
复制
/**
 * 分享图片 和文本
 * 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,"选择要分享到的平台吧"));
    }
}

分享多张图片

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

代码语言:javascript
复制
/**
 * 分享多个图片
 * 目前来看 只有微博能同时分享文本和内容
 */
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,"选择分享平台"));
    }
}

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

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

代码语言:javascript
复制
/**
 * 分享图片去微信朋友圈
 */
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

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

代码语言:javascript
复制

/**
 * 判断是否存在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;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 不使用第三方 SDK 实现简单分享
    • 分享存文本内容
      • 分享文本+图片
        • 分享多张图片
          • 分享 图片+文本到微信朋友圈
            • 检查是否有隐式intent要启动的activity
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档