热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

这篇文章主要介绍了Android实现新浪微博一键分享的实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

写在本章前

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

1. 开发环境及SDK下载

开发工具:Android studio2.1.3版本

ShareSDK:Mob官网(www.mob.com)下载最新社会化分享ShareSDK2.7.7版本,解压如图示


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



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



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


将申请到的APP key替换


2. 配置AndroidManifest.xml












3. 添加必要的activity信息



  
    
    
  
  
 

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

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

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

4.1 新浪微博key申请

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


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


3)确认提交即可获取APP Key和Secret


4)新浪微博获取APP的Android包名和签名


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


6)Android签名的获取

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



7)新浪微博测试权限

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


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();
  }
}

对话框如图示;


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 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后,点击新浪微博的图形按钮,会弹出如下图的图文分享框,输入文字即可完成。

如图示


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


登录


授权


分享成功

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


成功分享

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

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

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


推荐阅读
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
author-avatar
enochsun
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有