当前位置:   article > 正文

Android 之 QQ分享_android 打开qq分享内容

android 打开qq分享内容

(1)QQShare


(一)创建并配置工程

  1. 新建工程并导入SDK的jar文件
    (1)创建一个工程,并把open-sdk.jar文件和mta_sdk_x.x.x.jar文件拷贝到libs(或lib)目录下,
    (2)将open-sdk.jar加入编译路径中
    1. 配置AndroidManifest
<!--权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!--注册所需组件-->
<activity
android:name="com.tencent.tauth.AuthActivity" 
android:noHistory="true" 
android:launchMode="singleTask" >
<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="tencent你的AppId" />
</intent-filter>
</activity>

<!--SDK_V2.0引入了AssistActivity-->
<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize" 
/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

(二)创建实例并实现回调
1. 创建实例
Tencent是SDK的功能入口,所有的接口调用都得通过Tencent进行调用。因此,调用SDK,首先需要创建一个Tencent实例,其代码如下:

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
// 其中APP_ID是分配给第三方应用的appid,类型为String。
mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());
// 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取
// 初始化视图
initViews();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  1. 实现回调
    所有的SDK接口调用,都会传入一个回调,用以接收SDK返回的调用结果。回调的主要接口有两种:
    2.1 实现回调 IUiListener
    调用SDK已经封装好的接口时,例如:登录、快速支付登录、应用分享、应用邀请等接口,需传入该回调的实例。
    IUiListener的实现示例代码如下:
private class BaseUiListener implements IUiListener {
@Override
public void onComplete(JSONObject response) {
mBaseMessageText.setText("onComplete:");
mMessageText.setText(response.toString());
doComplete(response);
}
protected void doComplete(JSONObject values) {
}
@Override
public void onError(UiError e) {
showResult("onError:", "code:" + e.errorCode + ", msg:"
+ e.errorMessage + ", detail:" + e.errorDetail);
}
@Override
public void onCancel() {
showResult("onCancel", "");
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

2.2 实现回调 IRequestListener
使用requestAsync、request等通用方法调用sdk未封装的接口时,例如上传图片、查看相册等,需传入该回调的实例。
IRequestListener的实现示例代码如下:

private class BaseApiListener implements IRequestListener {
@Override
public void onComplete(final JSONObject response, Object state) {
showResult("IRequestListener.onComplete:", response.toString());
doComplete(response, state);
}
protected void doComplete(JSONObject response, Object state) {
}
@Override
public void onIOException(final IOException e, Object state) {
showResult("IRequestListener.onIOException:", e.getMessage());
}
@Override
public void onMalformedURLException(final MalformedURLException e,
Object state) {
showResult("IRequestListener.onMalformedURLException", e.toString());
}
@Override
public void onJSONException(final JSONException e, Object state) {
showResult("IRequestListener.onJSONException:", e.getMessage());
}
@Override
public void onConnectTimeoutException(ConnectTimeoutException arg0,
Object arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSocketTimeoutException(SocketTimeoutException arg0,
Object arg1) {
// TODO Auto-generated method stub
}
//1.4版本中IRequestListener 新增两个异常
@Override
public void onNetworkUnavailableException(NetworkUnavailableException e, Object state){
// 当前网络不可用时触发此异常
}
@Override
public void onHttpStatusException(HttpStatusException e, Object state) {
// http请求返回码非200时触发此异常
}
public void onUnknowException(Exception e, Object state) {
// 出现未知错误时会触发此异常
}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

应用在调用SDK提供的接口时,将实现了对应回调接口的实例传入。当SDK的接口调用完成后,具体如登录、应用邀请和应用分享调用完成后,会回调传入的接口实例。
3. 特别注意
应用调用Andriod_SDK接口时,如果要成功接收到回调,需要在调用接口的Activity的onActivityResult方法中增加如下代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Tencent.onActivityResultData(requestCode,resultCode,data,listener);
}
  • 1
  • 2
  • 3
  • 4

其中onActivityResultData接口中的listener为当前调用的Activity所实现的相应回调UIListener。

  1. 调用SDK接口实现分享
    由于QQ分享并不需要提前登录,因此,可以直接调用Tencent.shareToQQ的接口;接口调用很简单,代码如下:
public void share(View view)
{
Bundle bundle = new Bundle();
//这条分享消息被好友点击后的跳转URL。
bundle.putString(Constants.PARAM_TARGET_URL, "http://connect.qq.com/");
//分享的标题。注:PARAM_TITLE、PARAM_IMAGE_URL、PARAM_    SUMMARY不能全为空,最少必须有一个是有值的。
bundle.putString(Constants.PARAM_TITLE, "我在测试");
//分享的图片URL
bundle.putString(Constants.PARAM_IMAGE_URL, 
"http://img3.cache.netease.com/photo/0005/2013-03-07/8PBKS8G400BV0005.jpg");
//分享的消息摘要,最长50个字
bundle.putString(Constants.PARAM_SUMMARY, "测试");
//手Q客户端顶部,替换“返回”按钮文字,如果为空,用返回代替
bundle.putString(Constants.PARAM_APPNAME, "??我在测试");
//标识该消息的来源应用,值为应用名称+AppId。
bundle.putString(Constants.PARAM_APP_SOURCE, "星期几" + AppId);

mTencent.shareToQQ(this, bundle , listener);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

特别注意:一定要添加以下代码,才可以从回调listener中获取到消息。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (null != mTencent) 
mTencent.onActivityResult(requestCode, resultCode, data);
}
  • 1
  • 2
  • 3
  • 4

(2)获取用户信息


  1. Tencent类的request或requestAsync接口简介

在SDK中,有一些功能接口,如登录,分享消息到QQ等,SDK对其调用单独封装成了独立的接口;但是,SDK中的另外一些接口,如获取用户信息、获取用户相册列表、发送分享(addshare)、发表说说、上传图片、创建相册等,则被统一封装在Tencent类的request或requestAsync方法中,通过传入不同的参数实现不同的接口调用。request和requestAsync这两个接口的功能相同。

获取用户信息有两种方式:同步方式和异步方式
request(String graphPath, Bundle params, String httpMethod)
发送同步调用请求访问腾讯提供的OpenAPI。
requestAsync(String graphPath, Bundle params, String httpMethod, IRequestListener listener, Object state)

这里写图片描述

  1. 获取用户信息
    2.1 异步方式调用
public void getUserInfo()
{
mTencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null,
Constants.HTTP_GET, new BaseApiListener("get_simple_userinfo", false),
null);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.2 同步方式调用
注意:由于同步调用直接访问网络,是延时性操作,需要放入线程中执行。

public void getUserInfoInThread()
{
new Thread(){
@Override
public void run() {
JSONObject json = mTencent.request(Constants.GRAPH_SIMPLE_USER_INFO, null, Constants.HTTP_GET);

System.out.println(json);
}
}.start();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  1. 用户信息详情
{
"is_yellow_year_vip": "0",
"ret": 0,
"figureurl_qq_1":
"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40",
"figureurl_qq_2":
"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
"nickname": "小罗",
"yellow_vip_level": "0",
"msg": "",
"figureurl_1":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50",
"vip": "0",
"level": "0",
"figureurl_2":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
"is_yellow_vip": "0",
"gender": "男",
"figureurl":
"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

(2)更换QQ头像


1. 简单调用
更换QQ头像, 使用的是Tencent类的setAvatar方法;调用以下代码就可以实现;其中,listener是一个IUiListener实例。

private void doSetAvatar(String imagePath) {
Bundle params = new Bundle();
params.putString(Constants.PARAM_AVATAR_URI, imagePath);
mTencent.setAvatar(this, params, listener);
}
  • 1
  • 2
  • 3
  • 4
  • 5

2. 从相机或相册中获取照片设置为QQ头像
在实际使用中,用户一般希望从相册中获得照片,或者调用相机进行拍照,再将其设置为QQ头像。因此,下面将讲解从相册中获取图片设置为头像的例子。
2.1 调用系统的Intent获取图片
我们可以发Intent,从手机内存中读取图片,也可以直接调用照相机进行拍照。
下面是从手机内存读取图片:

private void onClickSetAvatar() {
if (ready()) {
Intent intent = new Intent();
// 开启Pictures画面Type设定为image
intent.setType("image/*");
// 使用Intent.ACTION_GET_CONTENT这个Action
intent.setAction(Intent.ACTION_GET_CONTENT);
// 取得相片后返回本画面
startActivityForResult(intent, REQUEST_SET_AVATAR);
// 在 onActivityResult 中调用 doSetAvatar
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.2 在onActivityResult里获取图片,并设置头像

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (mTencent == null){
return;
}
if (!mTencent.onActivityResult(requestCode, resultCode, data)) {
if (data != null) {
if (requestCode == REQUEST_SET_AVATAR) {
doSetAvatar(data.getData());
}
}
}
}
private void doSetAvatar(Uri uri) {
Bundle params = new Bundle();
params.putString(Constants.PARAM_AVATAR_URI, uri.toString());
// 这个return_activity是可选的
// params.putString(Constants.PARAM_AVATAR_RETURN_ACTIVITY,
// "com.tencent.sample.ReturnActivity");

// mTencent.setAvatar(this, params, new BaseUiListener());
mTencent.setAvatar(this, params, new BaseUiListener(), R.anim.zoomin, R.anim.zoomout);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/292844
推荐阅读
相关标签
  

闽ICP备14008679号