欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现新浪微博一键分享的实例代码

程序员文章站 2023-11-17 23:44:04
写在本章前 愈来愈多的app支持一键分享至qq空间、微信朋友圈、新浪微博的功能,同时支持第三方账号登录,如qq、微信、新浪微博等第三方平台的账号。本章结合当下流行的设计,...

写在本章前

愈来愈多的app支持一键分享至qq空间、微信朋友圈、新浪微博的功能,同时支持第三方账号登录,如qq、微信、新浪微博等第三方平台的账号。本章结合当下流行的设计,兼顾免费的开源sharesdk,结合项目中的实际需求,整合出一套分享源码,版权所有,如需转载请注明转载地址。

1. 开发环境及sdk下载

开发工具:android studio2.1.3版本

sharesdk:mob官网()下载最新社会化分享sharesdk2.7.7版本,解压如图示

Android实现新浪微博一键分享的实例代码

进入sharesdk for android文件,找到quickintegrater.jar文件,根据官网介绍双击打开,根据需求集成第三方平台,在某些情况如若双击无法打开,windows系统下,进入cmd找到quickintegrater.jar所在的当前目录,键入java -jar quickintegrater.jar,根据实际需求集成第三方平台,最后生成sample的文件夹,包括需要使用到的libs等文件

Android实现新浪微博一键分享的实例代码

Android实现新浪微博一键分享的实例代码

复制新生成文件夹sample下面的全部内容到自己所建立的project下,同时需要对加入到libs的jar文件添加库依赖

Android实现新浪微博一键分享的实例代码

Android实现新浪微博一键分享的实例代码

mob进入后台,申请分享使用权限,获取app key和app secret

Android实现新浪微博一键分享的实例代码

将申请到的app key替换

Android实现新浪微博一键分享的实例代码

2. 配置androidmanifest.xml

<uses-permission android:name="android.permission.get_tasks" />
<uses-permission android:name="android.permission.internet" />
<uses-permission android:name="android.permission.access_wifi_state" />
<uses-permission android:name="android.permission.access_network_state" />
<uses-permission android:name="android.permission.change_wifi_state" />
<uses-permission android:name="android.permission.write_external_storage" />
<uses-permission android:name="android.permission.read_phone_state" />
<uses-permission android:name="android.permission.manage_accounts"/>
<uses-permission android:name="android.permission.get_accounts"/>
<!-- 蓝牙分享所需的权限 -->
<uses-permission android:name="android.permission.bluetooth" />
<uses-permission android:name="android.permission.bluetooth_admin" />

3. 添加必要的activity信息

<activity
   android:name="com.mob.tools.mobuishell"
   android:theme="@android:style/theme.translucent.notitlebar"
   android:configchanges="keyboardhidden|orientation|screensize"
   android:screenorientation="portrait"
   android:windowsoftinputmode="statehidden|adjustresize" >
<!-- 调用新浪原生sdk,需要注册的回调activity -->
  <intent-filter>
    <action android:name="com.sina.weibo.sdk.action.action_sdk_req_activity" />
    <category android:name="android.intent.category.default" />
  </intent-filter>
<!--
   <intent-filter>
     <data android:scheme="tencent100371282" />
     <action android:name="android.intent.action.view" />
     <category android:name="android.intent.category.browsable" />
     <category android:name="android.intent.category.default" />
   </intent-filter>
-->  
 </activity>

<!--微信分享回调
 <activity
   android:name="cn.sharesdk.demo.wxapi.wxentryactivity"
   android:theme="@android:style/theme.translucent.notitlebar"
   android:configchanges="keyboardhidden|orientation|screensize"
   android:exported="true"
   android:screenorientation="portrait" />
 -->

备注:上述代码中,有关于微信和qq的分享回调,本文只讲述新浪微博的分享使用,qq和微信的activity添加可供参考

4. 替换mob后台申请的appkey与各个平台申请的key

更换aseests下面的sharesdk.xml中的appkey,以及需要添加第三方应用需要的appkey和appsecret,以新浪微博为例.

4.1 新浪微博key申请

1)登录,申请,填写账号,申请注册等信息,以个人为例,在申请结束后,获取“微连接”权限,点击“立即创建微连接”;

Android实现新浪微博一键分享的实例代码

2)填写应用名称,勾选应用平台,以android为例;

Android实现新浪微博一键分享的实例代码

3)确认提交即可获取app key和secret

Android实现新浪微博一键分享的实例代码

4)新浪微博获取app的android包名和签名

Android实现新浪微博一键分享的实例代码

5)通过进入申请的应用名称“android实例”app下的androidmanifest.xml中获取包名;

Android实现新浪微博一键分享的实例代码

6)android签名的获取

通过4)中新浪微博提供的签名工具,github下载的“app_signatures.apk”,安装到手机,同时将app“android实例”安装到手机,输入android包名,即可生成对应的android签名

Android实现新浪微博一键分享的实例代码

Android实现新浪微博一键分享的实例代码

7)新浪微博测试权限

需要注意的是,此时并没有对app进行上线,并没有通过审核,暂时只有测试权限可以关联15个测试账号使用;

Android实现新浪微博一键分享的实例代码

5. 正式编程

此部分包括一键底部弹出对话框,按钮操作,第三方分享等操作;

5.1 自定义dialog

参考了多个博客,总结出自己所需要的dialog。

/**
 * created by user on 2016/10/18.
 */
public class sharedialog extends dialog{
  private dialog dialog;
  private context context;
  private layoutinflater inflater;
  private imageview iv_share_sina, iv_share_qqzone, iv_share_wxfriend;

  public sharedialog(context context){
    super(context);
    init(context);
  }
  private void init(context context){
    view view = inflater.from(context).inflate(r.layout.bottom_share_dialog, null);
    dialog = new dialog(context, r.style.sharedialog_style);
    dialog.setcontentview(view);

    relativelayout rl_dialog_bg = (relativelayout)view.findviewbyid(r.id.rl_dialog_bg);
    rl_dialog_bg.setonclicklistener(new view.onclicklistener() {
      @override
      public void onclick(view v) {
        dialog.dismiss();
      }
    });
    //设置铺满
    window dialogwindow = dialog.getwindow();
    dialogwindow.setgravity(gravity.bottom);//设置显示位置
    windowmanager.layoutparams lp = dialogwindow.getattributes(); // 获取对话框当前的参数值
//    lp.x = 0; // 新位置x坐标
//    lp.y = -20; // 新位置y坐标

    lp.width = windowmanager.layoutparams.match_parent; // 宽度
   lp.height = windowmanager.layoutparams.wrap_content; // 高度
   lp.alpha = 9f; // 透明度
    dialogwindow.setattributes(lp);
    /* //设置铺满
    window window = dialog.getwindow();
    windowmanager.layoutparams wl = window.getattributes();
    wl.x = 0;
    wl.y = ((activity) context).getwindowmanager().getdefaultdisplay()
        .getheight();
    wl.width = viewgroup.layoutparams.match_parent;
    wl.height = viewgroup.layoutparams.wrap_content;
    // 设置显示位置
    dialog.onwindowattributeschanged(wl);*/

    iv_share_sina = (imageview) view.findviewbyid(r.id.iv_share_sina);
    iv_share_qqzone = (imageview) view.findviewbyid(r.id.iv_share_qqzone);
    iv_share_wxfriend = (imageview) view.findviewbyid(r.id.iv_share_wxfriend);
  }

  /**
   * 设置新浪微博监听事件
   */
  public void setsinaclicklistener(view.onclicklistener clicklistener){
    iv_share_sina.setonclicklistener(clicklistener);
  }
  /**
   * 设置qq空间监听事件
   */
  public void setqqzoneclicklistener(view.onclicklistener clicklistener){
    iv_share_qqzone.setonclicklistener(clicklistener);
  }
  /**
   * 设置微信朋友圈监听事件
   */
  public void setwxfriendclicklistener(view.onclicklistener clicklistener){
    iv_share_wxfriend.setonclicklistener(clicklistener);
  }
  public void show(){
    dialog.show();
  }
  public void dismiss(){
    dialog.dismiss();
  }
}

对话框如图示;

Android实现新浪微博一键分享的实例代码

5.2 sharesdk初始化

在需要activity分享界面,或者在mainactivity的oncreate()函数中进行初始化

//sharesdk初始化
sharesdk.initsdk(mactivity);

5.3 获取和保存当前屏幕的截图,用以第三方的分享

作为第三方分享的一个点,如何将屏幕的截图,通过新浪微博一键分享到微博中。

/**
 * 获取和保存当前屏幕的截图
 * 用以第三方分享
 */
private bitmap getandsavacurrentimage(activity activity) {
  // 1.获取windows中最顶层的view
  view view = activity.getwindow().getdecorview();
  view.builddrawingcache();

  // 2.获取状态栏高度
  rect rect = new rect();
  view.getwindowvisibledisplayframe(rect);
  int statusbarheights = rect.top;
  display display = activity.getwindowmanager().getdefaultdisplay();

  // 3.获取屏幕宽和高
  int widths = display.getwidth();
  int heights = display.getheight();

  // 4.允许当前窗口保存缓存信息
  view.setdrawingcacheenabled(true);

  // 5.去掉状态栏
  bitmap bmp = bitmap.createbitmap(view.getdrawingcache(), 0,
      statusbarheights, widths, heights - statusbarheights);

  // 销毁缓存信息
  view.destroydrawingcache();

  return bmp;
}

/**
 * 将截取的图片保存到sdcard中并且命名
 */
private void savetosd(bitmap bmp, string filename) {
  //判断sd卡是否存在
  if (hassdcard()){
    log.i("wzl", "存储卡存在,可以调用。");
    try {
      file file = new file(filename);
      if (!file.exists()){
        file.createnewfile();
      }
      fileoutputstream fos = new fileoutputstream(file);
      if (null != fos){
        // 第一参数是图片格式,第二个是图片质量,第三个是输出流
        bmp.compress(bitmap.compressformat.png, 100, fos);
        // 用完关闭
        fos.flush();
        fos.close();
      }
    } catch (exception e) {
      e.printstacktrace();
    }
  }
}

/**
 * @return 检查是否存在sdcard
 */
public static boolean hassdcard(){
  string sdcardstate = environment.getexternalstoragestate();
  if (sdcardstate.equals(environment.media_mounted)) {
    //有存储的sdcard
    return true;
  } else {
    log.i("wzl", "没有检测到sdcard!");
    return false;
  }
}

5.4 监听事件

点击新浪微博,直接弹出图文分享界面,所需要的图片为对于当前屏幕的截图,同时加载自己添加的文字以及网址链接,这部分可以作为app分享的网址下载链接,下列代码也给出了新浪微博分享的一些其他使用案例,可以根据个人喜好或者项目的实际需求进行更改;

/**
 *
 * 在弹出的9宫格分享页面中,会有很多平台,如果有些平台不希望显示,可以有两种方法,
  1.删除项目引用的两个工程之一的mainlibs目录下的libs里面对应的平台的jar包,删除九格宫不要的平台,只要删除对应平台的jar就行
  2.配置sharesdk.conf文件,不想显示的平台设置enable="false"
 */
  /**
   * sharesdk集成方法有两种

   * 1、第一种是引用方式,例如引用onekeyshare项目,onekeyshare项目再引用mainlibs库

   * 2、第二种是把onekeyshare和mainlibs集成到项目中,本例子就是用第二种方式
   请看“sharesdk
   * 使用说明文档”,sdk下载目录中
   或者看网络集成文档
   * http://wiki.sharesdk.cn/android_%e5%bf%ab
   * %e9%80%9f%e9%9b%86%e6%88%90%e6%8c%87%e5%8d%97
   * 3、混淆时,把sample或者本例子的混淆代码copy过去,在proguard-project.txt文件中
   *
   * 平台配置信息有三种方式: 1、在我们后台配置各个微博平台的key
   * 2、在代码中配置各个微博平台的key,http://sharesdk.cn/androiddoc
   * /cn/sharesdk/framework/sharesdk.html
   * 3、在配置文件中配置,本例子里面的assets/sharesdk.xml,
   */

  private void showshare() {
    //实例化一个onekeyshare对象
    onekeyshare oks = new onekeyshare();
    // 分享时notification的图标和文字 2.5.9以后的版本不调用此方法
    //oks.setnotification(r.drawable.ic_launcher, getstring(r.string.app_name));
    //关闭sso授权
    oks.disablessowhenauthorize();
    //指定微博平台,如果不添加这行,则弹出9宫格供用户选择
    oks.setplatform(sinaweibo.name);
    //分享内容的标题
    // title标题,印象笔记、邮箱、信息、微信、人人网和qq空间使用
//    oks.settitle("新浪微博分享");
    // titleurl是标题的对应的网址链接,仅在人人网和qq空间使用,如果没有可以不设置
//    oks.settitleurl("http://sharesdk.cn");
    //分享网络图片,新浪微博分享网络图片需要通过审核后申请高级写入接口,否则请注释掉测试新浪微博
    //分享网络图片,新浪分享网络图片,需要申请高级权限,否则会报10014的错误
    //权限申请:新浪开放平台-你的应用中-接口管理-权限申请-微博高级写入接口-statuses/upload_url_text
    //注意:本地图片和网络图片,同时设置时,只分享本地图片
    //oks.setimageurl("http://f1.sharesdk.cn/imgs/2014/02/26/owwplzo_638x960.jpg");
    oks.setimagepath(filename);
    //是否直接分享(true则直接分享),false是有九格宫,true没有
    oks.setsilent(false);
    //platform.shareparams sina_weibo = new platform.shareparams();
    //sina_weibo.settext("第一次分享" + " " + "www.baidu.com");
    //imagepath是图片的本地路径,linked-in以外的平台都支持此参数
    //sina_weibo.setimagepath("/sdcard/share_pic.jpg");//确保sdcard下面存在此张图片
    /*oks.setsharecontentcustomizecallback(new sharecontentcustomizecallback() {
      @override
      public void onshare(platform platform, platform.shareparams paramstoshare) {
        if(sinaweibo.name.equals(platform.getname())) {
          paramstoshare.settext("初始使用" + " " + "http://www.baidu.com");
          paramstoshare.seturl(null);
        }
      }
    });*/
    //设置分享的文本内容,所有平台都需要这个字段
    oks.settext("新浪微博第一次分享" + " " + "http://www.baidu.com");
    //url仅在微信(包括好友和朋友圈)中使用
//    oks.seturl("http://sharesdk.cn");
    // comment是我对这条分享的评论,仅在人人网和qq空间使用
    //oks.setcomment("我是测试评论文本");
    // site是分享此内容的网站名称,仅在qq空间使用
    //oks.setsite("sharesdk");
    // siteurl是分享此内容的网站地址,仅在qq空间使用
    //oks.setsiteurl("http://sharesdk.cn");

    /*oks.setsharecontentcustomizecallback(new sharecontentcustomizecallback() {
      @override
      public void onshare(platform platform, platform.shareparams paramstoshare) {
        if (sinaweibo.name.equals(platform.getname())) {
          paramstoshare.settext("分享文本" + " " + "www.baidu.com");
          paramstoshare.seturl(null);
        }
      }
    });*/
    oks.setcallback(new platformactionlistener() {
      @override
      public void oncomplete(platform platform, int i, hashmap<string, object> hashmap) {
        //分享完成
        message msg = new message();
        msg.what = msg_action_ccallback;
        msg.arg1 = 1;
        msg.obj = platform;
        handler.sendmessage(msg);
      }

      @override
      public void onerror(platform platform, int i, throwable throwable) {
        //分享失败
        throwable.printstacktrace();
        message msg = new message();
        msg.what = msg_action_ccallback;
        msg.arg1 = 2;
        msg.obj = throwable;
        handler.sendmessage(msg);
      }

      @override
      public void oncancel(platform platform, int i) {
        //分享取消
        message msg = new message();
        msg.what = msg_action_ccallback;
        msg.arg1 = 3;
        msg.obj = platform;
        handler.sendmessage(msg);
      }
    });
    oks.show(mactivity);
  }

6. 新浪微博实例分享

在正确使用sharesdk后,点击新浪微博的图形按钮,会弹出如下图的图文分享框,输入文字即可完成。

如图示

Android实现新浪微博一键分享的实例代码

备注:如若分享网址链接,必须加上“http://”, 否则分享出去的仅是www.baidu.com

Android实现新浪微博一键分享的实例代码
登录

Android实现新浪微博一键分享的实例代码
授权

Android实现新浪微博一键分享的实例代码
分享成功

备注:分享成功后,会有响应提示,需自行添加,登录新浪微博,即可看到个人信息中的分享,因为未未上线,因此“来自未通过审核应用”,当点击“百度”,即可进行界面跳转

Android实现新浪微博一键分享的实例代码
成功分享

通过以上的核心部分的讲解,应该对新浪微博的分享有了基本的认识和使用能力。具体的细节,如如何创建界面,按钮,查询没有做过多的讲解。如果有需要,可以直接给我发简信,或者留言。

此外,针对上述的知识有不明白,异议,亦或是不正确的地方,还请帮忙指正,谢谢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。