ShareSDK主要用于qq、qq空间、微信、微信朋友圈的分享功能以及第三方登录功能

SMSSDK主要用于短信验证码

集成工作:将sharesdk与smssdk同时集成到android-studio项目中:
注册账号获取key与secret(有两对奥,一个是sharesdk一个是SMSSdk,这里只贴了一个图)

如果项目的主模块同时依赖ShareSDKLibs与SMSSDKLibs,那么肯定回报jar包重复的错误。这里我们可以让我们项目的主模块去依赖SMSSDKLibs,让模块SMSSDKLibs去依赖ShareSDKLibs,并删除里面重复导入的jar包,至于是哪个我也不记得,我上个图大家对比一下。

配置工作
这里主要是一些初始化工作,官方文档里写的很清楚,这里主要说一下一些当初困扰我的地方

首先是短信验证码:

初始化与注册监听

SMSSDK.initSDK(getApplicationContext(), Contacts.GELINGPHONE_APPKEY, Contacts.GELINGPHONE_APPSECRET);
SMSSDK.registerEventHandler(new MySMSCALLBACKHANDLER());

监听的类:

    private class MySMSCALLBACKHANDLER extends EventHandler {@Overridepublic void afterEvent(int event, int result, Object data) {Message msg = Message.obtain();msg.what = MSG_SMSSDK_CALLBACK;Log.i("PPPPP", event+" "+result);msg.arg1 = event;msg.arg2 = result;msg.obj = data;myHandler.sendMessage(msg);}}

处理返回信息的handler

private class MyHandler extends Handler {WeakReference<Activity> weakReference;public MyHandler(Activity activity) {weakReference = new WeakReference<Activity>(activity);}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Activity activity = weakReference.get();if (activity != null) {switch (msg.what) {case 2:Toast.makeText(UserRegisterActivity.this, "手机号不能为空", Toast.LENGTH_SHORT).show();btn_getVerificationCode.setEnabled(true);break;case 3:Toast.makeText(UserRegisterActivity.this, "手机号错误", Toast.LENGTH_SHORT).show();btn_getVerificationCode.setEnabled(true);break;case MSG_SMSSDK_CALLBACK:if (msg.arg2 == SMSSDK.RESULT_ERROR) {if (msg.arg1 == 3 && msg.arg2 == 0) {                         Toast.makeText(UserRegisterActivity.this, "验证码错误", Toast.LENGTH_SHORT).show();// flag = false;btn_getVerificationCode.setEnabled(true);btn_getVerificationCode.setText("获取验证码");repeatCodeTime=VerificationCodeTime;//复位  }if (msg.arg1 == 2 && msg.arg2 == 0) {             Toast.makeText(UserRegisterActivity.this, "验证码发送失败", Toast.LENGTH_SHORT).show();                              btn_getVerificationCode.setEnabled(true);               btn_getVerificationCode.setText("获取验证码");repeatCodeTime=                                        Contacts.VerificationCodeTime;//复位}} else {switch (msg.arg1) {case   SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE: {   Toast.makeText                                                                                 (UserRegisterActivity.this, "验证成功",Toast.LENGTH_SHORT).show();}break;case SMSSDK.EVENT_GET_VERIFICATION_CODE: {// if (RE_SEND_FLAG) {Toast.makeText(UserRegisterActivity.this, "验证码已经发送", Toast.LENGTH_SHORT).show();//flag = true;// btn_resend.setEnabled(false);myHandler.sendEmptyMessageDelayed(SEND_OK, 1000);//  RE_SEND_FLAG = false;//   }}break;}}break;case SEND_OK:// if (flag) {if (repeatCodeTime >= 0) {btn_getVerificationCode.setText(repeatCodeTime + "秒后重发");// Log.i(TAG, time + "");if (repeatCodeTime == 0) {btn_getVerificationCode.setText("获取验证码");btn_getVerificationCode.setEnabled(true);repeatCodeTime = Contacts.VerificationCodeTime;//复位} else {repeatCodeTime--;btn_getVerificationCode.setEnabled(false);myHandler.sendEmptyMessageDelayed(SEND_OK, 1000);}}// }break;}}}}

主要注意的是发送短信与验证验证码是同一个监听,所在在逻辑上要搞清楚什么是发送成功or失败,什么是验证成功or失败。还有一个问题就是明明已经搭建成功,同一个手机号也没有测试超过10条,但就是显示短信发送失败也就是监听里的值event与result总是2,0。这也许有可能是被智能验证了,只要到官网主页项目里把短信设置里的智能验证关闭就ok了。

社会化分享
QQ与QQ空间分享:

ShareSDK.initSDK(this);

1.创建assets目录将ShareSDk.xml放进去

当然要到对应的平台去申请key罗(http://open.qq.com/)

        AppKey = "XXXXXXX"/> <!-- 修改成你在sharesdk后台注册      的应用的appkey"--><QZone
        Id="3"SortId="3"AppId="XXXXXXXXXXXXXXX"AppKey="XXXXXXXXXXXXXXXXXXXX"Enable="true" /><QQ
        Id="7"SortId="7"AppId="XXXXXXXXXXXXXXX"AppKey="XXXXXXXXXXXXXXXXXXXX"ShareByAppClient="true"//有客户端先调用客户端Enable="true" />

配置文件除了权限之外还有添加activity

  <activity
            android:name="com.mob.tools.MobUIShell"android:configChanges="keyboardHidden|orientation|screenSize"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:windowSoftInputMode="stateHidden|adjustResize"><intent-filter><data android:scheme="tencent(填腾讯申请的id)" /><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.BROWSABLE" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

代码:

   /*** qq好友*/private void showQQShare() {ShareSDK.initSDK(this);ShareParams sp = new ShareParams();sp.setTitle(Contacts.SHARESDK_TITLE);if (Share_Content != null) {sp.setText(Share_Content);}sp.setImageUrl(Contacts.SHARESDK_IMAGE_URL);//网络图片rulsp.setTitleUrl(Contacts.SHARESDK_NET_URL);  //网友点进链接后,可以看到分享的详情//3、非常重要:获取平台对象Platform qq = ShareSDK.getPlatform(QQ.NAME);qq.setPlatformActionListener(TestActivity.this); // 设置分享事件回调qq.authorize();// 执行分享qq.share(sp);if (mShareDialog != null) {mShareDialog.dismiss();}Log.i("GGGG", "mShareDialog关闭");}
 /*** qq空间*/private void showQQShare2() {ShareSDK.initSDK(this);ShareParams sp = new ShareParams();sp.setTitle(Contacts.SHARESDK_TITLE);if (Share_Content != null) {sp.setText(Share_Content);}sp.setImageUrl(Contacts.SHARESDK_IMAGE_URL);//网络图片rulsp.setTitleUrl(Contacts.SHARESDK_NET_URL);  //网友点进链接后,可以看到分享的详情//3、非常重要:获取平台对象Platform qq = ShareSDK.getPlatform(QZone.NAME);qq.setPlatformActionListener(TestActivity.this); // 设置分享事件回调//  qq.authorize();//空间分享不需要这句  否则报错// 执行分享qq.share(sp);if (mShareDialog != null) {mShareDialog.dismiss();}Log.i("GGGG", "mShareDialog关闭");}

微信分享

    <Wechat
        Id="4"SortId="4"AppId="XXXXXXX"AppSecret="XXXXX"            //微信开发平台BypassApproval="false"Enable="true" /><WechatMoments
        Id="5"SortId="5"AppId="XXXXXXX"AppSecret="XXXXX"BypassApproval="false"Enable="true" />

添加WXEntryActivity注意文件夹的名字此activity必须放在wxapi文件下,不能改文件夹的名字。

配置文件

       <!-- 微信分享回调 --><activity
            android:name=".wxapi.WXEntryActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar" />

代码

 /*** 微信好友分享*/private void showWeiXinShare2() {ShareSDK.initSDK(this);ShareParams sp = new ShareParams();sp.setShareType(Platform.SHARE_WEBPAGE); //非常重要:一定要设置分享属性sp.setTitle(Contacts.SHARESDK_TITLE);if (Share_Content != null) {sp.setText(Share_Content);}sp.setImageUrl(Contacts.SHARESDK_IMAGE_URL);//网络图片rulsp.setUrl(Contacts.SHARESDK_NET_URL);  //网友点进链接后,可以看到分享的详情//3、非常重要:获取平台对象Platform wechatMoments = ShareSDK.getPlatform(Wechat.NAME);wechatMoments.setPlatformActionListener(TestActivity.this); // 设置分享事件回调// 执行分享wechatMoments.share(sp);if (mShareDialog != null) {mShareDialog.dismiss();}}
  /*** 微信朋友圈分享*/private void showWeiXinShare() {ShareSDK.initSDK(this);ShareParams sp = new ShareParams();sp.setShareType(Platform.SHARE_WEBPAGE); //非常重要:一定要设置分享属性// sp.setTitle("我是分享标题");  //分享标题  此属性微信用不了sp.setTitle(Contacts.SHARESDK_TITLE);/*       if (Share_Content != null) {sp.setText(Share_Content);}*/sp.setImageUrl(Contacts.SHARESDK_IMAGE_URL);//网络图片rulsp.setUrl(Contacts.SHARESDK_NET_URL);  //网友点进链接后,可以看到分享的详情//3、非常重要:获取平台对象Platform wechatMoments = ShareSDK.getPlatform(WechatMoments.NAME);wechatMoments.setPlatformActionListener(TestActivity.this); // 设置分享事件回调// 执行分享wechatMoments.share(sp);if (mShareDialog != null) {mShareDialog.dismiss();}}

分享的三个回调监听

 @Overridepublic void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {//分享成功mHandler.sendEmptyMessage(2);}@Overridepublic void onError(Platform platform, int i, Throwable throwable) {//分享失败throwable.printStackTrace();Message msg = new Message();msg.what = 6;msg.obj = throwable.getMessage();mHandler.sendMessage(msg);}@Overridepublic void onCancel(Platform platform, int i) {//取消分享mHandler.sendEmptyMessage(5);}

分享主要是微信分享那块注意一下,WXEntryActivity必须放在wxapi文件夹下,不然没用,还有就是去各大平台去申请账号了。

第三方登录:

 //qq第三方登录dialogBuilder=FileUtils.showDialog(UserLoginActivity.this);Platform qq = ShareSDK.getPlatform(QQ.NAME);qq.SSOSetting(false);  //设置false表示使用SSO授权方式qq.setPlatformActionListener(this); // 设置分享事件回调if (qq.isValid()) {qq.removeAccount(true);}if (qq.isClientValid()) {Log.i("QQ快速登录", "安装了QQ");} else {Log.i("QQ快速登录", "没有安装了QQ");//   Toast.makeText(UserLoginActivity.this, "检测到您的手机没有安装QQ", Toast.LENGTH_SHORT).show();FileUtils.showToast(UserLoginActivity.this, mToast, "检测到您的手机没有安装QQ");return;}qq.showUser(null);//获取到用户信息
 //微信登录dialogBuilder=FileUtils.showDialog(UserLoginActivity.this);Log.i("KKK::::KKK","iv_weixin");Platform weixinfd = ShareSDK.getPlatform(Wechat.NAME);weixinfd.SSOSetting(false);weixinfd.setPlatformActionListener(this);if (weixinfd.isAuthValid ()){weixinfd.removeAccount(true);}if (weixinfd.isClientValid()){Log.i("微信快速登录", "安装了微信");}else{Log.i("微信快速登录", "没有安装了微信");//Toast.makeText(UserLoginActivity.this, "检测到您的手机没有安装QQ", Toast.LENGTH_SHORT).show();FileUtils.showToast(UserLoginActivity.this, mToast, "检测到您的手机没有安装微信");if (dialogBuilder!=null){dialogBuilder.dismiss();}return;}weixinfd.showUser(null);

也有三个监听

 @Overridepublic void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {//登陆成功Log.i("KKK::::KKK","获取用户名字:"+ platform.getDb().getUserName());Log.i("KKK::::KKK","获取用户头像:"+ platform.getDb().getUserIcon());Message msg = new Message();msg.what = 1;msg.arg1 = 1;msg.arg2 = i;msg.obj = platform;UIHandler.sendMessage(msg, this);Toast.makeText(UserLoginActivity.this,"onComplete",Toast.LENGTH_SHORT).show();}@Overridepublic void onError(Platform platform, int i, Throwable throwable) {/*** 登录失败*/Log.i("KKK::::KKK","onError");throwable.printStackTrace();Toast.makeText(UserLoginActivity.this,"onError",Toast.LENGTH_SHORT).show();/*** 判断第三方登录失败*/Message msg = new Message();msg.what = 1;msg.arg1 = 2;msg.arg2 = 1;msg.obj = throwable;UIHandler.sendMessage(msg, this);// 分享失败的统计ShareSDK.logDemoEvent(4, platform);}@Overridepublic void onCancel(Platform platform, int i) {/*** 取消登录*/Log.i("KKK::::KKK","onCancel");Toast.makeText(UserLoginActivity.this,"onCancel",Toast.LENGTH_SHORT).show();Message msg = new Message();msg.what = 1;msg.arg1 = 3;msg.arg2 = 1;msg.obj = platform;UIHandler.sendMessage(msg, this);}

第三方登录的细节:像英雄联盟手机助手一样qq快速登录的时候会有英雄联盟的图片,而这里只是单纯的显示APP,没有图片,我问过怎么弄,他们说只要在腾讯开发平台上发布apk,提交app的图片,就会有了。

这里只是大概介绍了share的分享,第三方登录以及短信验证码。具体操作还是以官方文档为准。

关于视频录制:ShareRec

配置:libs 下放jar包,jnilib放so文件

我遇到的问题:视频黑屏有声音,我建议这么排查(前提是sdk搭的没问题)
1.需要录制的view(一般应该是个viewgroup吧)是否设置背景,有时候没设置背景style导致黑屏
2.设置刷新屏幕的频率,本人遇到过,比如录制的画面是一个viewpager里加载的fragment就是黑屏,问了客服问了一下午,自己看文档设置频率搞定

 private void initVideoRecord(Context context) {recorder = new ViewRecorder(activity_start_class, "XXXXXXXX", "XXXXXXXXX");// 设置视频的最大尺寸recorder.setMaxFrameSize(Recorder.LevelMaxFrameSize.LEVEL_1280_720);// 设置视频的质量(高、中、低)recorder.setVideoQuality(Recorder.LevelVideoQuality.LEVEL_HIGH);// 设置视频的最短时长recorder.setMinDuration(10 * 1000);// 设置视频的输出路径recorder.setCacheFolder(ProjectUtils.getDiskCacheDir2(context, "video"));// 设置是否强制使用软件编码器对视频进行编码(兼容性更高)recorder.setForceSoftwareEncoding(true, true);recorder.startAuotRefreshRate(1);}

频率不能设置太大,倒置您的操作

提醒:sharerec没有截图功能,且对popwindow,dialog之类不会录制

Android-Studio 用ShareSDK集成社会化分享,短信验证码,视频录制功能相关推荐

  1. 自动化软件测试 - 通过 Android Studio 开发 App 自动拦截读取短信验证码

        之前一期介绍了怎样通过 Python 的代码去获取短信验证码去进行软件测试,这一期将主要介绍 怎样 通过 Android Studio 开发 App 自动拦截读取短信验证码.     Andr ...

  2. Android Studio精彩案例(五)《JSMS短信验证码功能实现》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 很多应用刚打开的时候,让我们输入手机号,通过短信验证码来登录该应用.那么,这个场景是怎么实现的呢?其实是很多开放平台提供了短信验证功能 ...

  3. Android短信验证码自动填写功能的实现

    本文出自:黄敏争的博客 前言: android应用经常会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,通常,用户收到短信需要最小化应用去查看短信再填入验证码,必然比较麻烦, ...

  4. php实现短信找回密码,thinkphp5怎么调用云片接口实现发送短信验证码找回密码功能...

    thinkphp5怎么调用云片接口实现发送短信验证码找回密码功能 发布时间:2020-12-11 12:33:42 来源:亿速云 阅读:60 作者:小新 小编给大家分享一下thinkphp5怎么调用云 ...

  5. 短信验证码自动填写功能的实现

    http://blog.csdn.net/u014343528/article/details/50899380 本文出自:黄敏争的博客 前言: android应用经常会涉及到注册登录功能,而许多的注 ...

  6. html5实现短信验证修改密码,thinkphp5如何调用云片接口实现发送短信验证码找回密码功能...

    下面由thinkphp框架教程栏目给大家介绍thinkphp5如何调用云片接口实现发送短信验证码找回密码功能,希望对需要的朋友有所帮助! 思路: 1.用户输入手机号,请求获取短信验证码. 2.thin ...

  7. 06-发送短信验证码实现登录功能

    1.发送短信验证码实现登录功能的流程 1.1.获取验证码流程 1.2.登录流程 1.3.页面带有图形验证码的流程 2. 注册登录二合一页面的开发 2.1.将src目录下的App.vue页面上通用显示的 ...

  8. 如何使用短信验证码完成注册功能

    如何使用短信验证码完成注册功能 一. MD5加密工具类 import java.security.MessageDigest; import java.security.NoSuchAlgorithm ...

  9. android自定义秒表,Android自定义Chronometer实现短信验证码秒表倒计时功能

    本文实例为大家分享了Chronometer实现倒计时功能,Android提供了实现按照秒计时的API,供大家参考,具体内容如下 一.自定义ChronometerView 继续自TextView 主要原 ...

最新文章

  1. ORACLE告警日志文件
  2. mysql to double_MySQL令人咋舌的隐式转换 - 惊觉...
  3. python之路---03 整型 bool 字符串 for循环
  4. spark学习-SparkSQL--07-SparkContext类和SparkConf类
  5. description----NSData To NSString
  6. Qt 使用vs调试的方法
  7. 南京玄武常发广场远程预付费电能管理系统的设计与应用(安科瑞 顾晓燚)
  8. CSDN账号注册 设置用户名
  9. delphi7中的指针
  10. CloseHandle(),TerminateThread(),ExitThread()的区别
  11. 参考平面及其高度_遥感影像中建筑物平面及高度信息提取方法
  12. 郑捷《机器学习算法原理与编程实践》学习笔记(第二章 中文文本分类(三)—KNN算法)...
  13. Vue学习(学习打卡Day14)
  14. 计算机应用类专业综合知识模拟卷(七),计算机应用专业综合知识模拟试卷5
  15. 【UVM基础】TLM1.0 通信机制(port/export/imp/analysis_xxx)快速上手指南
  16. Keras LSTM对20 Newsgroups数据集进行分类
  17. 虚拟机安装图形化界面
  18. Web追踪——CNAME Cloaking
  19. 电商秒杀系统设计分析
  20. 《搜索引擎原理、技术与系统》读书笔记(2)——分词算法

热门文章

  1. burpsuite+captcha-killer插件识别图片验证码进行爆破
  2. Java中的static关键字
  3. 计算机网络实验哈工大威海,哈工大威海计算机网络实验报告1
  4. Python代码大全之汉语转拼音库选择(含代码)
  5. SMC - 状态机代码生成工具
  6. 浅谈XS-Leaks之Timeless timing attck
  7. @NotEmpty和@NotBlank和@NotNull
  8. 转……不相爱的爱,是一片废墟???
  9. 万字血泪史:从黑客到银行风险专家,一切全是因为真爱!
  10. python中倒背如流_八字基础知识--倒背如流篇