前段时间公司要集成qq分享,虽说都知道腾讯的的文档写的坑多,但是没办法,只能硬着头皮往上冲。
首先我们需要先下载qq的sdk,我用的是基础版本open_sdk_r5788_lite.jar,之后导入到工程,这个就不说了,接下来需要在清单文件中申请权限,这个也不说了,腾讯文档上都有。
之后在application标签下写上
android:name="com.tencent.tauth.AuthActivity" android:noHistory="true" android:launchMode="singleTask" > android:name="android.intent.action.VIEW" /> android:name="android.intent.category.DEFAULT" /> android:name="android.intent.category.BROWSABLE" /> android:scheme="tencentAPP_ID" /> android:name="com.tencent.connect.common.AssistActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="orientation|keyboardHidden|screenSize" />
这两个activity必须要写,否则无法成功,
android:scheme="tencentAPP_ID" />
一定要注意这里,在app_id前面加上tencent,否则分享之后收不到结果,也不知道腾讯为啥要这样干。
接下来创建实例,在代码中添加
mTencent = Tencent.createInstance("APP_ID", this.getApplicationContext());
实现回调
class MyIUiListener implements IUiListener{ @Override public void onComplete(Object o) { Toast.makeText(InviteFriendActivity.this, "分享成功!", Toast.LENGTH_SHORT).show(); } @Override public void onError(UiError uiError) { Toast.makeText(InviteFriendActivity.this, uiError.errorMessage, Toast.LENGTH_SHORT).show(); } @Override public void onCancel() { Toast.makeText(InviteFriendActivity.this, "分享取消!", Toast.LENGTH_SHORT).show(); } }
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (null != mTencent) { Tencent.onActivityResultData(requestCode, resultCode, data, listener); } }
其中onActivityResultData接口中的listener为当前调用的Activity所实现的相应回调UIListener。
最后就是唤醒qq,进行分享了,当时按照qq的文档来,各种报错,也不知道为啥,后来在网上查了下,现在把代码贴出来共享一下
public class ShareUtils { /** * (2) 分享纯图片 * QQShare.SHARE_TO_QQ_KEY_TYPE 必选 Int 分享类型,分享纯图片时填写QQShare.SHARE_TO_QQ_TYPE_IMAGE。 * QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL 必选 String 需要分享的本地图片路径。 * 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按钮。 */ public static void onClickShare(Tencent mTencent, Activity activity, IUiListener listener) { Bundle params = new Bundle(); // params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL,imageUrl.getText().toString()); // params.putString(QQShare.SHARE_TO_QQ_APP_NAME, appName.getText().toString()); params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE); params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); mTencent.shareToQQ(activity, params, listener); } /** * (3) 分享音乐 * QQShare.SHARE_TO_QQ_KEY_TYPE 必填 Int 分享的类型。分享音乐填Tencent.SHARE_TO_QQ_TYPE_AUDIO。 * QQShare.PARAM_TARGET_URL 必选 String 这条分享消息被好友点击后的跳转URL。 * QQShare.SHARE_TO_QQ_AUDIO_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按钮。 */ public static void onClickAudioShareImage(Tencent mTencent, Activity activity, IUiListener listener) { final Bundle params = new Bundle(); params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_AUDIO); params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的标题"); params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要"); params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, "http://www.baidu.com"); params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://gaopin-img.bj.bcebos.com/chinacity.jpg"); params.putString(QQShare.SHARE_TO_QQ_AUDIO_URL, "音乐链接"); params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "测试应用222222"); params.putInt(QQShare.SHARE_TO_QQ_EXT_INT,QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN); mTencent.shareToQQ(activity, params, listener); } /** * (4) 分享应用 * QQShare.SHARE_TO_QQ_KEY_TYPE 必填 Int 分享的类型。分享音乐填Tencent.SHARE_TO_QQ_TYPE_PP。 * 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按钮。 */ public static void onClickAppShare(Tencent mTencent, Activity activity, IUiListener listener) { final Bundle params = new Bundle(); params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_APP); params.putString(QQShare.SHARE_TO_QQ_TITLE, "要分享的标题"); params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要"); params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://gaopin-img.bj.bcebos.com/chinacity.jpg"); params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "测试应用"); mTencent.shareToQQ(activity, params, listener); } /** * 1) 分享图文消息 * 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按钮 */ public static void shareToQQ(Tencent mTencent, Activity activity, IUiListener listener) { Bundle params = new Bundle(); params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE,QQShare.SHARE_TO_QQ_TYPE_DEFAULT); params.putString(QQShare.SHARE_TO_QQ_TITLE, "标题");// 标题 params.putString(QQShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要");// 摘要 params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,"http://www.baidu.com");// 内容地址 params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://gaopin-img.bj.bcebos.com/chinacity.jpg");// 网络图片地址 params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "应用名称");// 应用名称 params.putString(QQShare.SHARE_TO_QQ_EXT_INT, "其它附加功能"); // 分享操作要在主线程中完成 mTencent.shareToQQ(activity, params, listener); } /** * 1.14 分享到QQ空间 * QzoneShare.SHARE_TO_QZONE_KEY_TYPE 选填 Int SHARE_TO_QZONE_TYPE_IMAGE_TEXT(图文) * QzoneShare.SHARE_TO_QQ_TITLE 必填 分享的标题,最多200个字符。 * QzoneShare.SHARE_TO_QQ_SUMMARY 选填 String 分享的摘要,最多600字符。 * QzoneShare.SHARE_TO_QQ_TARGET_URL 必填 String 需要跳转的链接,URL字符串。 * QzoneShare.SHARE_TO_QQ_IMAGE_URL 选填 String 分享的图片, 以ArrayList最后还有个坑,就是分享的url地址中一定要加入http:// 不加这个的话,分享的时候会提示tagURL错误。的类型传入,以便支持多张图片(注:图片最多支持9张图片,多余的图片会被丢弃) */ public static void shareToQZone(Tencent mTencent, Activity activity, IUiListener listener) { 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, "标题");// 标题 params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, "要分享的摘要");// 摘要 params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL,"http://www.baidu.com");// 内容地址 ArrayList imgUrlList = new ArrayList<>(); imgUrlList.add("http://gaopin-img.bj.bcebos.com/chinacity.jpg"); params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL,imgUrlList);// 图片地址 // 分享操作要在主线程中完成 mTencent.shareToQzone(activity, params,listener); } }
OK了,大家如果发现那里有问题可以提出来