Android-Studio 用ShareSDK集成社会化分享,短信验证码,视频录制功能
2016-09-10 15:40
471 查看
ShareSDK主要用于qq、qq空间、微信、微信朋友圈的分享功能以及第三方登录功能
SMSSDK主要用于短信验证码
集成工作:将sharesdk与smssdk同时集成到android-studio项目中:
注册账号获取key与secret(有两对奥,一个是sharesdk一个是SMSSdk,这里只贴了一个图)
如果项目的主模块同时依赖ShareSDKLibs与SMSSDKLibs,那么肯定回报jar包重复的错误。这里我们可以让我们项目的主模块去依赖SMSSDKLibs,让模块SMSSDKLibs去依赖ShareSDKLibs,并删除里面重复导入的jar包,至于是哪个我也不记得,我上个图大家对比一下。
配置工作
这里主要是一些初始化工作,官方文档里写的很清楚,这里主要说一下一些当初困扰我的地方
首先是短信验证码:
初始化与注册监听
监听的类:
处理返回信息的handler
主要注意的是发送短信与验证验证码是同一个监听,所在在逻辑上要搞清楚什么是发送成功or失败,什么是验证成功or失败。还有一个问题就是明明已经搭建成功,同一个手机号也没有测试超过10条,但就是显示短信发送失败也就是监听里的值event与result总是2,0。这也许有可能是被智能验证了,只要到官网主页项目里把短信设置里的智能验证关闭就ok了。
社会化分享
QQ与QQ空间分享:
1.创建assets目录将ShareSDk.xml放进去
当然要到对应的平台去申请key罗(http://open.qq.com/)
配置文件除了权限之外还有添加activity
代码:
微信分享
添加WXEntryActivity注意文件夹的名字此activity必须放在wxapi文件下,不能改文件夹的名字。
配置文件
代码
分享的三个回调监听
分享主要是微信分享那块注意一下,WXEntryActivity必须放在wxapi文件夹下,不然没用,还有就是去各大平台去申请账号了。
第三方登录:
也有三个监听
第三方登录的细节:像英雄联盟手机助手一样qq快速登录的时候会有英雄联盟的图片,而这里只是单纯的显示APP,没有图片,我问过怎么弄,他们说只要在腾讯开发平台上发布apk,提交app的图片,就会有了。
这里只是大概介绍了share的分享,第三方登录以及短信验证码。具体操作还是以官方文档为准。
关于视频录制:ShareRec
配置:libs 下放jar包,jnilib放so文件
我遇到的问题:视频黑屏有声音,我建议这么排查(前提是sdk搭的没问题)
1.需要录制的view(一般应该是个viewgroup吧)是否设置背景,有时候没设置背景style导致黑屏
2.设置刷新屏幕的频率,本人遇到过,比如录制的画面是一个viewpager里加载的fragment就是黑屏,问了客服问了一下午,自己看文档设置频率搞定
频率不能设置太大,倒置您的操作
提醒:sharerec没有截图功能,且对popwindow,dialog之类不会录制
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 { @Override public 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); } @Override public 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);//网络图片rul sp.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);//网络图片rul sp.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);//网络图片rul sp.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);//网络图片rul sp.setUrl(Contacts.SHARESDK_NET_URL); //网友点进链接后,可以看到分享的详情 //3、非常重要:获取平台对象 Platform wechatMoments = ShareSDK.getPlatform(WechatMoments.NAME); wechatMoments.setPlatformActionListener(TestActivity.this); // 设置分享事件回调 // 执行分享 wechatMoments.share(sp); if (mShareDialog != null) { mShareDialog.dismiss(); } }
分享的三个回调监听
@Override public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) { //分享成功 mHandler.sendEmptyMessage(2); } @Override public void onError(Platform platform, int i, Throwable throwable) { //分享失败 throwable.printStackTrace(); Message msg = new Message(); msg.what = 6; msg.obj = throwable.getMessage(); mHandler.sendMessage(msg); } @Override public 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);
也有三个监听
@Override public 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(); } @Override public 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); } @Override public 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最快捷集成Sharesdk短信验证码功能(干货)
- android]ShareSDK——内容分享和短信验证
- Android Cocos2d-x游戏集成友盟社会化组件分享功能
- android 快速集成ShareSDk分享功能
- Android Studio Mob快速集成短信验证(图文教程)
- Android集成友盟社会化分享功能
- Android开发工程中集成mob短信验证码功能的方法
- Android集成友盟社会化分享功能----关键在微信分享(MD5的处理)
- [android]ShareSDK——内容分享和短信验证
- AndroidStudio短信验证功能收不到验证码
- Android开发工程中集成mob短信验证码功能的方法
- Android Cocos2d-x游戏集成友盟社会化组件分享功能
- Android Studio Mob快速集成短信验证(图文教程)
- android集成短信验证功能(Eclipse下)
- Android集成获取短信验证码功能
- Android Cocos2d-x游戏集成友盟社会化组件分享功能
- Android Cocos2d-x游戏集成友盟社会化组件分享功能
- android_app开发集成mob短信验证码功能
- [android]ShareSDK——内容分享和短信验证
- Android中使用ShareSDK集成分享功能的实例代码