Android平台快速集成当下流行平台分享
- 前言
- 集成jar包
- 微信
- 微信接入指南
- 在app级别的buildgradle中添加如下依赖
- QQ
- QQ接入指南
- 导入qq_simplejar包即可
- 新浪微博
- 新浪微博接入指南
- 导入weiboSDKCore_314jar包
- 导入so文件见下图
- 在在app级别的buildgradle中添加资源设置
- 微信
- 配置清单文件及回调Activity编码
- 微信
- 文件名称必须是wxapi两个回调Activity必须是WXEntryActivity和WXPayEntryActivity
- 新浪微博
- 新浪微博的回调Activity要实现IWeiboHandlerResponse接口来完成微博分享的回调
- 微信
- 分享工具类封装
- 辅助工具方法
- 微信分享的图片不能超过32kb需要进行图片压缩知道满足条件才可调起微信
- 调用分享工具
- 总结
前言
时别两个月,处理好学校的事情,我又回来了。今天给大家带来当下流行平台的分享集成,分别是微信好友、微信朋友圈、QQ好友、QQ空间以及新浪微博的分享集成。
集成jar包
微信
微信接入指南
在app级别的build.gradle中添加如下依赖:
compile ‘com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+’
QQ接入指南
导入qq_simple.jar包即可
新浪微博
新浪微博接入指南
1.导入weiboSDKCore_3.1.4.jar包
2.导入so文件,见下图
3.在在app级别的build.gradle中添加资源设置
//这里要特别注意,不同文件夹下面的so文件都要报上一级目录包含进来sourceSets {main {// jniLibs.srcDirs = ['libs/share/weiboso']jniLibs.srcDirs('libs/share/weiboso','libs')//可变参数,可以加任意个so文件父目录,否则会抛异常}}
配置清单文件及回调Activity编码
微信
文件名称必须是wxapi,两个回调Activity必须是WXEntryActivity和WXPayEntryActivity
<!-- 微信通用Activity --><activity
android:name=".wxapi.WXEntryActivity"android:exported="true"android:launchMode="singleTop"/><!-- 微信支付 --><activity
android:name=".wxapi.WXPayEntryActivity"android:exported="true"android:launchMode="singleTop"><intent-filter><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEFAULT"/><data android:scheme="wx0e42a8f6cc530cd0"/></intent-filter></activity><!-- end -->
<!-- QQ --><activity
android:name="com.tencent.tauth.AuthActivity"android:launchMode="singleTask"android:noHistory="true"><intent-filter><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEFAULT"/><category android:name="android.intent.category.BROWSABLE"/><data android:scheme="1105809896"/></intent-filter></activity><activity
android:name="com.tencent.connect.common.AssistActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
新浪微博
新浪微博的回调Activity要实现IWeiboHandler.Response接口,来完成微博分享的回调
package com.sinosoft.nanniwan.share;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;import com.sina.weibo.sdk.api.share.BaseResponse;
import com.sina.weibo.sdk.api.share.IWeiboHandler;
import com.sina.weibo.sdk.api.share.IWeiboShareAPI;
import com.sina.weibo.sdk.auth.WeiboAuthListener;
import com.sina.weibo.sdk.constant.WBConstants;
import com.sina.weibo.sdk.exception.WeiboException;
import com.sinosoft.nanniwan.base.BaseApplication;
import com.sinosoft.nanniwan.base.BaseAuthorityActivity;
import com.sinosoft.nanniwan.utils.Toaster;/*** 创建日期:2017/6/23 8:46* 微博回调基类* @author yzz*/
public abstract class WeiBoShareBaseActivity extends Activity implements IWeiboHandler.Response {protected IWeiboShareAPI mWeiboShareAPI;protected boolean isFirst = true;@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);if (mWeiboShareAPI == null) return;mWeiboShareAPI.handleWeiboResponse(intent, this); //当前应用唤起微博分享后,返回当前应用}/*** 解决微博点击取消保存草稿无法正常接收到回调的bug*/@Overrideprotected void onResume() {super.onResume();if (mWeiboShareAPI == null) return;if (!isFirst) {boolean isResp = mWeiboShareAPI.handleWeiboResponse(getIntent(), this);if (!isResp) {finish();}}isFirst = false;}@Overridepublic void onResponse(BaseResponse baseResponse) {switch (baseResponse.errCode) {case WBConstants.ErrorCode.ERR_OK:Toaster.show(getApplicationContext(), "分享成功", Toast.LENGTH_SHORT);finish();break;case WBConstants.ErrorCode.ERR_CANCEL:Toaster.show(getApplicationContext(), "已取消", Toast.LENGTH_SHORT);finish();break;case WBConstants.ErrorCode.ERR_FAIL:Toaster.show(getApplicationContext(), "分享失败", Toast.LENGTH_SHORT);finish();break;default:finish();break;}}
}
/*** 创建日期:2017/6/23 8:46* 微博回调实现类* @author yzz*/
public class WeiBoShareActivity extends WeiBoShareBaseActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(R.layout.activity_wei_bo_share);if (getIntent() == null) return;ShareUtils.Helper helper = getIntent().getParcelableExtra("helper");if (helper == null) {finish();return;}//创建微博API接口类对象mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, helper.getWeiboAPPID());mWeiboShareAPI.registerApp();ShareUtils utils = new ShareUtils(helper);mWeiboShareAPI.sendRequest(this, utils.shareWB(this));}
}
分享工具类封装
package com.sinosoft.nanniwan.share;import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import com.sina.weibo.sdk.api.ImageObject;
import com.sina.weibo.sdk.api.TextObject;
import com.sina.weibo.sdk.api.WeiboMultiMessage;
import com.sina.weibo.sdk.api.share.IWeiboShareAPI;
import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest;
import com.sina.weibo.sdk.api.share.WeiboShareSDK;
import com.sinosoft.nanniwan.R;
import com.sinosoft.nanniwan.base.BaseApplication;
import com.sinosoft.nanniwan.utils.Toaster;
import com.sinosoft.nanniwan.widget.MyPopWindow;
import com.tencent.connect.share.QQShare;
import com.tencent.connect.share.QzoneShare;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;import java.util.ArrayList;/*** 创建日期:2017/6/22 14:49** @author yzz*/
public class ShareUtils implements View.OnClickListener {private ViewGroup mGroup;private MyPopWindow mShareWindow;private Helper helper;private IWXAPI iwxapi;private Activity context;public ShareUtils(Helper helper) {this.helper = helper;}public void showShare(Activity context) {this.context = context;if (mShareWindow == null) mShareWindow = new MyPopWindow(context);if (mGroup == null)mGroup = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.share_item, null);shareClick();mShareWindow.addView(mGroup);}public SendMultiMessageToWeiboRequest shareWB(Activity context) {return weiBo(context);}/*** 分享的点击事件*/private void shareClick() {View link = mGroup.findViewById(R.id.link);View wx = mGroup.findViewById(R.id.wx);View wxmoments = mGroup.findViewById(R.id.wxmoments);View qq = mGroup.findViewById(R.id.qq);View qqzoon = mGroup.findViewById(R.id.qqzoon);View weibo = mGroup.findViewById(R.id.weibo);View cacel = mGroup.findViewById(R.id.cancel);View cancleV = mGroup.findViewById(R.id.cancel_v);link.setOnClickListener(this);wx.setOnClickListener(this);wxmoments.setOnClickListener(this);qq.setOnClickListener(this);qqzoon.setOnClickListener(this);weibo.setOnClickListener(this);cacel.setOnClickListener(this);cancleV.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.link:copLink();break;case R.id.wx:shareWx(true);break;case R.id.wxmoments:shareWx(false);break;case R.id.qq:QQ();break;case R.id.qqzoon:QQZoon();break;case R.id.weibo:if (Util.checkIsinstalled(BaseApplication.getBaseApplication(),"com.sina.weibo")) {Intent intent = new Intent(context, WeiBoShareActivity.class);intent.putExtra("helper", helper);context.startActivity(intent);}else {Toaster.show(BaseApplication.getBaseApplication(),"检测到您手机未安新浪微博程序");}break;case R.id.cancel:case R.id.cancel_v:mShareWindow.removeView();break;}}/*** 复制链接*/public void copLink() {}/*** @param isFriend 是否是分享到好友*/private void shareWx(final boolean isFriend) {//检查是否安装了微信if (!Util.checkIsinstalled(BaseApplication.getBaseApplication(),"com.tencent.mm")){Toaster.show(BaseApplication.getBaseApplication(),"检测到您手机未安装微信程序");return;}WXWebpageObject webpageObject = new WXWebpageObject();webpageObject.webpageUrl = helper.webUrl;WXMediaMessage wxMediaMessage = new WXMediaMessage(webpageObject);wxMediaMessage.title = helper.webtitle;wxMediaMessage.description = helper.webDescrible;wxMediaMessage.thumbData = Util.compressImage(BitmapFactory.decodeResource(context.getResources(),helper.imgId));SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = Helper.buildTransaction("webpage");req.message = wxMediaMessage;req.scene = isFriend ? SendMessageToWX.Req.WXSceneSession : SendMessageToWX.Req.WXSceneTimeline;// 调用api接口发送数据到微信if (iwxapi == null) iwxapi = WXAPIFactory.createWXAPI(context, helper.WxAPPID);iwxapi.sendReq(req);}/*** ##QQ好友* QQShare.SHARE_TO_QQ_KEY_TYPE 必填 Int 分享的类型。图文分享(普通分享)填Tencent.SHARE_TO_QQ_TYPE_DEFAULT* QQShare.PARAM_TARGET_URL 必填 String 这条分享消息被好友点击后的跳转URL。* QQShare.PARAM_TITLE 必填 String 分享的标题, 最长30个字符。* QQShare.PARAM_SUMMARY 可选 String 分享的消息摘要,最长40个字。* QQShare.SHARE_TO_QQ_IMAGE_URL 可选 String 分享图片的URL或者本地路径* QQShare.SHARE_TO_QQ_APP_NAME 可选 String 手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替* QQShare.SHARE_TO_QQ_EXT_INT 可选 Int 分享额外选项,两种类型可选(默认是不隐藏分享到QZone按钮且不自动打开分享到QZone的对话框):* QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN,分享时自动打开分享到QZone的对话框。* QQShare.SHARE_TO_QQ_FLAG_QZONE_ITEM_HIDE,分享时隐藏分享到QZone按钮*/private void QQ() {final Bundle params = new Bundle();Tencent mTencent = Tencent.createInstance(helper.QQAPPID, context);params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);params.putString(QQShare.SHARE_TO_QQ_TITLE, helper.webtitle);params.putString(QQShare.SHARE_TO_QQ_SUMMARY, helper.webDescrible);params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, helper.webUrl);params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, helper.imgURL);params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "南泥湾");mTencent.shareToQQ(context, params, new IUiListener() {@Overridepublic void onComplete(Object o) {}@Overridepublic void onError(UiError uiError) {}@Overridepublic void onCancel() {}});}/*** ##QQ空间* QzoneShare.SHARE_TO_QQ_KEY_TYPE 选填 Int SHARE_TO_QZONE_TYPE_IMAGE_TEXT(图文)* QzoneShare.SHARE_TO_QQ_TITLE 必填 Int 分享的标题,最多200个字符。* QzoneShare.SHARE_TO_QQ_SUMMARY 选填 String 分享的摘要,最多600字符。* QzoneShare.SHARE_TO_QQ_TARGET_URL 必填 String 需要跳转的链接,URL字符串。* QzoneShare.SHARE_TO_QQ_IMAGE_URL 选填 String 分享的图片, 以ArrayList<String>的类型传入,以便支持多张图片(注:图片最多支持9张图片,多余的图片会被丢弃)。*/private void QQZoon() {//分享类型Tencent mTencent = Tencent.createInstance(helper.QQAPPID, context);final Bundle params = new Bundle();params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE, QzoneShare.SHARE_TO_QZONE_TYPE_IMAGE_TEXT);params.putString(QzoneShare.SHARE_TO_QQ_TITLE, helper.webtitle);//必填params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, helper.webDescrible);//选填params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL, helper.webUrl);//必填params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, helper.imgs);mTencent.shareToQzone(context, params, new IUiListener() {@Overridepublic void onComplete(Object o) {}@Overridepublic void onError(UiError uiError) {}@Overridepublic void onCancel() {}});}/*** 微博分享(这里的上下文不一样)WeiBoShareActivity*/private SendMultiMessageToWeiboRequest weiBo(Activity context) {if (helper == null || helper.weiboAPPID == null || helper.webtitle == null) return null;// 1. 初始化微博的分享消息WeiboMultiMessage weiboMessage = new WeiboMultiMessage();weiboMessage.textObject = getTextObj();weiboMessage.imageObject = getImageObj(context);// 2. 初始化从第三方到微博的消息请求SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();// 用transaction唯一标识一个请求request.transaction = String.valueOf(System.currentTimeMillis());request.multiMessage = weiboMessage;return request;}/*** 创建文本消息对象。** @return 文本消息对象。*/private TextObject getTextObj() {TextObject textObject = new TextObject();textObject.text = helper.webDescrible;textObject.title = helper.webtitle;textObject.actionUrl = helper.webUrl;return textObject;}/*** 创建图片消息对象。** @return 图片消息对象。*/private ImageObject getImageObj(Context context) {ImageObject imageObject = new ImageObject();Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),helper.imgId);imageObject.setImageObject(bitmap);return imageObject;}/*** 数据承载类*/public static class Helper implements Parcelable {private String webUrl;private String webtitle;private String webDescrible;private int imgId;private String WxAPPID;private String QQAPPID;//QQZoon需要private ArrayList<String> imgs;private String imgURL;private String weiboAPPID;public Helper() {}public String getWebUrl() {return webUrl;}public String getWebtitle() {return webtitle;}public String getWebDescrible() {return webDescrible;}public int getImgId() {return imgId;}public String getWxAPPID() {return WxAPPID;}public String getQQAPPID() {return QQAPPID;}public ArrayList<String> getImgs() {return imgs;}public String getImgURL() {return imgURL;}public String getWeiboAPPID() {return weiboAPPID;}protected Helper(Parcel in) {webUrl = in.readString();webtitle = in.readString();webDescrible = in.readString();imgId = in.readInt();WxAPPID = in.readString();QQAPPID = in.readString();imgs = in.createStringArrayList();imgURL = in.readString();weiboAPPID = in.readString();}public static final Creator<Helper> CREATOR = new Creator<Helper>() {@Overridepublic Helper createFromParcel(Parcel in) {Helper helper = new Helper();helper.webUrl = in.readString();helper.webtitle = in.readString();helper.webDescrible = in.readString();helper.imgId = in.readInt();helper.WxAPPID = in.readString();helper.QQAPPID = in.readString();helper.imgs = in.createStringArrayList();helper.imgURL = in.readString();helper.weiboAPPID = in.readString();return helper;}@Overridepublic Helper[] newArray(int size) {return new Helper[size];}};//微信转化需要private static String buildTransaction(final String type) {return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();}public Helper webUrl(final String webUrl) {this.webUrl = webUrl;return this;}public Helper webtitle(final String webtitle) {this.webtitle = webtitle;return this;}public Helper webDescrible(final String webDescrible) {this.webDescrible = webDescrible;return this;}public Helper imgId(final int imgId) {this.imgId = imgId;return this;}public Helper WxAPPID(final String WxAPPID) {this.WxAPPID = WxAPPID;return this;}public Helper QQAPPID(final String QQAPPID) {this.QQAPPID = QQAPPID;return this;}public Helper imgs(final ArrayList<String> imgs) {this.imgs = imgs;return this;}public Helper imgURL(final String imgURL) {this.imgURL = imgURL;return this;}public Helper weiboAPPID(final String weiboAPPID) {this.weiboAPPID = weiboAPPID;return this;}@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(webUrl);dest.writeString(webtitle);dest.writeString(webDescrible);dest.writeInt(imgId);dest.writeString(WxAPPID);dest.writeString(QQAPPID);dest.writeStringList(imgs);dest.writeString(imgURL);dest.writeString(weiboAPPID);}}@Overridepublic String toString() {return "ShareUtils{" +"mGroup=" + mGroup +", mShareWindow=" + mShareWindow +", helper=" + helper +", iwxapi=" + iwxapi +", context=" + context +'}';}
}
辅助工具方法
微信分享的图片不能超过32kb,需要进行图片压缩,知道满足条件才可调起微信
/*** 质量压缩方法** @param image* @return*/public static byte[] compressImage(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中int options = 90;while (baos.toByteArray().length / 1024 > 32) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩baos.reset(); // 重置baos即清空baosimage.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中options -= 5;// 每次都减少5}byte[] bytes = baos.toByteArray();try {baos.close();} catch (IOException e) {e.printStackTrace();}return bytes;}
调用分享工具
shareutils = new ShareUtils(new ShareUtils.Helper().WxAPPID(Config.W_APPKEY).webDescrible("应用测试描述").webtitle("应用测试标题").webUrl(shareUrl).QQAPPID(Config.QQ_APPID).imgURL(shareUrl).imgId(R.drawable.app_icon).weiboAPPID(Config.WB_APPID).imgs(list)) {@Overridepublic void copLink() {//复制链接}};
总结
需要注意的是在导入so文件的时候要注意,要写到文件上级目录,系统才能去调用so文件,否则抛异常,jniLibs.srcDirs(String.calss…str)是可变参数,所以很方便,我们可以将不同的so文件分开进行配置。只要注意到这点就基本上没啥问题了。由于项目的特殊性,无法提供源码,上述基本上已经帖出了相关代码,谢谢。
Android平台快速集成当下流行平台分享相关推荐
- Android Studio快速集成讯飞SDK实现文字朗读功能
今天,我们来学习一下怎么在Android Studio快速集成讯飞SDK实现文字朗读功能,先看一下效果图: 第一步 :了解TTS语音服务 TTS的全称为Text To Speech,即"从文 ...
- 推荐一款快速集成 4399 原创平台的 SDK 插件
这是一款神奇的插件. 这是一款能快速帮你集成 4399 原创平台的 SDK 插件. 这是一款插件小王子许彦峰新年归来.倾情奉献.全套开源并已上线 Cocos Store 的鼎力钜作. SDK 文档地址 ...
- Android使用ShareSDK集成第三方登录和分享(v3.1.2)
一.产品概述 ShareSDK是一种社会化分享组件,为iOS.Android.WP8 的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理后台. 二.集成方 ...
- android表情输入键盘,GitHub - UKfire/Emotion: 帮你的Android应用快速集成表情键盘
##Emotion 帮你快速集成Android表情键盘,让你的应用不止文字,让表情跳动起来 ##It looks Cool ##Usage Download ZIP,然后解压,将emoji包添加到自己 ...
- Android app快速集成Mob shareSDK分享到微信和QQ
Android app集成Mob shareSDK分享到微信和QQ 在线安装方法介绍 注意需要用到的appKey和appSecret 请自行到http://www.mob.com官网申请,这里不介绍申 ...
- Unity平台 | 快速集成华为AGC云数据库服务
1.环境与应用信息 版本名称 集成环境 测试设备 agconnect-database:1.2.3.301 Unity 2019.4.17f1c1 荣耀magic2 OPPO Reno2 AGC地址: ...
- Android开发之集成Twitter登陆以及分享,文后有源码。
目录 1.APP build 2.sdk初始化 3.按钮样式(布局文件) 3.1官方按钮登陆 3.2自定义按钮登陆 4.Twitter分享 5.源码传送:点我点我点我 1.APP build //推特 ...
- Android友盟集成QQ、微信、微博等第三方登录与分享
前言 最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的.为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟.这里记录一下完整的集成与使用流程 ...
- 周末去哪儿架构师跟你聊:大数据平台快速解决方案
内容来源:2017年5月13日,周末去哪儿架构师李锡铭在"Java开发者大会 | Java之美[上海站]"进行<大数据平台快速解决方案中>演讲分享.IT大咖说作为独家视 ...
- android快速集成微信分享支付
前言 最近公司的项目中有又又又又微信分享和支付的功能,每次我都会重新集成,为了方便以后的开发,以及方便各位同仁的开发,整合了这次开发的一些点滴,方便亲们快速集成微信分享和支付. 参考文档 –1.微信官 ...
最新文章
- Scrum敏捷开发看板工具分享
- SAP直接踢人下线 SM04
- sql 左联接 全联接_通过了解自我联接将您SQL技能提升到一个新的水平
- spring boot配置tomcat部署
- python编程学习_使用EduBlocks轻松学习Python编程
- MySQL越高版本越快吗_MySQL性能优化的最佳20+条经验
- MFC不能用UpdateData的解决方法
- python多态实例_Python多态实例详解
- 叙述计算机的主要应用领域并各举实例说明,大学计算机基础练习习题集.doc
- C++ Toolkit zz
- Archlinux 的灵魂──PKGBUILD、AUR 和 ABS
- 今日发现一个挺好的软件,控制音量 App音量控制(App Volume Control)v2.17 安卓版
- 计算机软件系统配置,电脑配置修改_电脑配置修改软件
- 【论文笔记】Explainable Reasoning over Knowledge Graphs for Recommendation
- 从头开始搭建kubernetes集群+istio服务网格(3)—— 搭建istio
- 正点原子 linux 开发板学习 uboot 篇 一
- C语言实现解析gps坐标(在一串字符串中找到北纬和东经的值)
- linux取消线程的原理,linux线程的取消(终止)方法
- Quest 3d中Lua script中常用方法2
- NLP之文本分词综述