本代码实现的QQ 互联SDK版本为1.6.1
在较新一版的QQ互联Android SDK 中,提供了一个定向分享的办法:
void com.tencent.tauth.Tencent.shareToQQ(Activity arg0, Bundle arg1, IUiListener arg2)
该方法可以将消息分享给指定的QQ好友。如下所示:
然而,从SDK的文档说明中,我们可以发现,该定点分享功能并不支持本地图片的分享。
Bundle 参数 |
是否必传 |
类型 |
参数说明 |
Constants.PARAM_TARGET_URL |
必选 |
String |
这条分享消息被好友点击后的跳转URL。 |
Constants.PARAM_TITLE |
可选 |
String |
分享的标题。注:PARAM_TITLE、PARAM_IMAGE_URL、PARAM_SUMMARY不能全为空,最少必须有一个是有值的。 |
Constants.PARAM_IMAGE_URL |
可选 |
String |
分享的图片URL。 |
Constants.PARAM_SUMMARY |
可选 |
String |
分享的消息摘要,最长50个字。 |
Constants.PARAM_APP_SOURCE |
可选 |
String |
标识该消息的来源应用,值为应用名称+AppId。 |
Constants.PARAM_APPNAME |
可选 |
String |
手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替 |
因此,对于想实现分享本地图片给指定好友的Android开发者,这是个非常郁闷的问题。
在这里,我有个小窍门教给大家,可以实现QQ定点分享本地图片的功能:
通过上传相册到QQ空间,获取本地图片的网络地址,再通过调用 shareToQQ(Activity arg0, Bundle arg1, IUiListener arg2)的方法实现分享图片给好友。
第一步:调用QQ登录功能
- mTencent = Tencent.createInstance(AppId, this.getApplicationContext());
- mTencent.login(this, Scope, listener);
第二步:调用接口上传本地图片到QQ空间
- String path = "/mnt/sdcard/test.jpg";
- byte[] data = null;
- try
- {
- RandomAccessFile f = new RandomAccessFile(path, "r");
- data = new byte[(int)f.length()];
- f.read(data);
- }
- catch (Exception e) {
- }
-
- Bundle b = new Bundle();
- b.putByteArray("picture", data);
- b.putString("photodesc", "1111111111111");
- IRequestListener listener = new BaseApiListener("upload_pic", true);
- mTencent.requestAsync(Constants.GRAPH_UPLOAD_PIC, b, Constants.HTTP_POST, listener, null);
这是上传成功后,回传的图片的信息
- {
- "ret": 0,
- "height": 600,
- "small_url": "http://o229.photo.store.qq.com/psb?/V10DxumN2xhOtm/EKUDoGCLJ64X7Naqiq80rLPn6be61U4GFX5cFSy*U1s!/a/dGAngIhBGgAA/DmQDAA!!&bo=IANYAgAAAAABAF4!",
- "width": 800,
- "lloc": "NDJ0ecqnomVN*1Hg0QsLYCeAiEEaAAA!",
- "large_url": "http://o229.photo.store.qq.com/psb?/V10DxumN2xhOtm/EKUDoGCLJ64X7Naqiq80rLPn6be61U4GFX5cFSy*U1s!/b/dGAngIhBGgAA/DmQDAA!!&bo=IANYAgAAAAABAF4!",
- "msg": "",
- "sloc": "NDJ0ecqnomVN*1Hg0QsLYCeAiEEaAAA!",
- "albumid": "V10DxumN2xhOtm"
- }
第三步:在BaseApiListener的接口中,取得上传的图片的网络地址,并调用定点分享接口,将其分享给QQ好友。
- try {
- int ret = response.getInt("ret");
- if (ret == 0)
- {
- String url = response.optString("large_url");
- Bundle bundle = new Bundle();
- bundle.putString(Constants.PARAM_TARGET_URL, url);
- bundle.putString(Constants.PARAM_IMAGE_URL, url);
- bundle.putString(Constants.PARAM_SUMMARY, text);
-
- mTencent.shareToQQ(this, bundle, listener);
- }
- } catch (JSONException e) {
- }
该参数Constants.PARAM_TARGET_URL是点击消息后跳转的地址,因此,若只是分享图片,则可将大图的网络地址赋值给它;若是分享文章等,则可将文章的链接赋值给它。最后一图为点击该分享后跳转的页面
|