Android开发QQ登陆、分享、空间分享及回调处理 不回调问题的处理

首先是看  qq互联里面的文档  按文档操作:qqsdk移动应用接入流程  按照这个流程一步一步来就是了。基本上没的错误的。但还是有些很坑的地方。这里列举一些。


接下来

一、首先是qq登陆。


下载sdk集成到项目  并在androidmanifest.xml里面增加节点   :集成到项目 

1. 在AndroidManifest.xml里声明QQ相关的Activity


<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="tencentxxxxxxxxxx" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.tencent.connect.common.AssistActivity"
            android:screenOrientation="behind"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="orientation|keyboardHidden">
        </activity>

AssistActivity   文档里面是没有的   ,只要你不加  系统会报错让你添加该activity。腾讯文档没有更新  这是很坑的地方。

注意哈  XXXXXXX的地方,要换成你的APP_ID    前面的tencent一定要哈。不能删除。以下文档凡事xxxxxxxx的地方都是app-id

2. 添加SDK到你的工程里

具体就是拷贝*.jar到lib目录下,然后添加编译。 这些基本上的朋友都会嘛  不用讲述了嘛
注意,这里有个坑,如果是全量SDK包,是包含有支付SDK的,有一些应用市场会限制个人开发者的产品里添加这种支付SDK,审核不过。 
修改方式也简单,就是只添加基础包,分享登录什么的够用了。下载下来的都有说明的。自己选择就是了 在jar里面。


3. 创建实例:

Tencent是SDK的功能入口,所有的接口调用都得通过Tencent进行调用。因此,调用SDK,首先需要创建一个Tencent实例,其代码如下
 private IWXAPI api;
    private Handler handler=new Handler();
    private Tencent tencent;
    private Button qqlanding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_land);
        
        // Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
        // 其中APP_ID是分配给第三方应用的appid,类型为String。

        tencent = Tencent.createInstance("xxxxxxx", this.getApplicationContext());
        
        // 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取

        // 初始化视图
        init();

    }


登陆点击事件调用此方法:
public void Login(){
        tencent = Tencent.createInstance("xxxxxxx", this.getApplicationContext());
        if (!tencent.isSessionValid())
        {
            tencent.login(this, "all", new BaseUiListener());
        }
    }

4. 实现回调接口

public class BaseUiListener implements IUiListener {
        @Override
        public void onComplete(Object object) {

            Toast.makeText(LandActivity.this,"登陆成功",Toast.LENGTH_SHORT).show();

        }


        @Override
        public void onError(UiError uiError) {

        }

        @Override
        public void onCancel() {

        }
    }

重载onActivityResult  这个方法要在腾讯开放平台有说这个问题、问题很乱 腾讯开放平台  

注:在某些低端机上调用登录后,由于内存紧张导致APP被系统回收,登录成功后无法成功回传数据。
解决办法如下
在调用login的Activity或者Fragment重写onActivityResult方法,示例代码如下:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == Constants.REQUEST_LOGIN) {
            if (resultCode == Constants.ACTIVITY_OK) {
                tencent.handleLoginData(data, new BaseUiListener());
            }

            super.onActivityResult(requestCode, resultCode, data);

        }
    }
好  这样 qq登陆的功能就完成了、。


接下来是

二、qq好友分享:

接上面第3条 创建实例 以后   继续

4. 实现分享回调接口  

class ShareUiListener implements IUiListener {

        @Override
        public void onComplete(Object o) {

            Toast.makeText(AboutActivity.this,"分享成功",Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onError(UiError uiError) {
            // 分享异常
        }

        @Override
        public void onCancel() {
            //分享取消
        }
    }

点击事件调用此方法  :分享的代码

private Bundle paramsa;
    private void shareToQQ() {
        paramsa = new Bundle();
        paramsa.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
        paramsa.putString(QQShare.SHARE_TO_QQ_TITLE, "标题");// 标题
        paramsa.putString(QQShare.SHARE_TO_QQ_SUMMARY, "头部按摩器");// 摘要
        paramsa.putString(QQShare.SHARE_TO_QQ_TARGET_URL, "http://mp.weixin.qq.com/s/ObyplzD9MQJ1OcXATN64hQ");// 内容地址
        paramsa.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://www.cdqldz.com/img/ew1.png");// 网络图片地址  params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "应用名称");// 应用名称
        paramsa.putString(QQShare.SHARE_TO_QQ_EXT_INT, "其它附加功能");

        tencent.shareToQQ(AboutActivity.this, paramsa, new ShareUiListener());
    }

5 同样的  要重写 onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // 官方文档没这句代码, 但是很很很重要, 不然不会回调!
        Tencent.onActivityResultData(requestCode, resultCode, data, new ShareUiListener());

        if (requestCode == Constants.REQUEST_API) {
            if (resultCode == Constants.REQUEST_QQ_SHARE ||
                    resultCode == Constants.REQUEST_QZONE_SHARE ||
                    resultCode == Constants.REQUEST_OLD_SHARE) {
                Tencent.handleResultData(data, new ShareUiListener());
            }
        }
    }
到此 就完成了分享工作 
有几个值得注意的问题: 
1. AndroidManifest.xml里的那个APP_ID前,一定要有tencent 
2. 重载onActivityResult

空间分享的代码就上传了 大同小异。
空间分享代码:
private Bundle params;
    private void shareToQZone() {
        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.qq.com/news/1.html");// 内容地址
        ArrayList<String> imgUrlList = new ArrayList<>();
        imgUrlList.add("http://f.hiphotos.baidu.com/image/h%3D200/sign=6f05c5f929738bd4db21b531918a876c/6a600c338744ebf8affdde1bdef9d72a6059a702.jpg");
        params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL,imgUrlList);// 图片地址

        tencent.shareToQzone(AboutActivity.this, params,new ShareUiListener());
        
    }









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Android开发中,接口回调是一种常用的设计模式。它用于实现不同组件之间的通信和交互。接口回调的基本原理是,一个类(称为回调接口)定义了一些方法,其他类可以实现这些方法并注册到回调接口中。当某个事件触发时,回调接口会调用注册的类的对应方法来处理事件。 在Android开发中,接口回调广泛应用于各种场景,比如点击事件的处理、网络请求的回调、异步任务的通知等。通过接口回调,我们可以将代码的逻辑分离,使得各个组件之间的耦合度降低,提高了代码的可维护性和扩展性。 举个例子来说,假设我们有一个按钮,当用户点击按钮时,我们希望执行一些特定的操作。这时,我们可以定义一个回调接口,比如OnClickListener,其中包含一个方法onClick。然后,我们可以在Activity中实现OnClickListener接口,并将其注册到按钮上。当用户点击按钮时,按钮会调用注册的OnClickListener的onClick方法,从而执行我们指定的操作。 因此,接口回调Android开发中非常重要的一部分,熟练掌握接口回调的使用可以提高代码的质量和开发效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [安卓开发之简单的接口回调](https://blog.csdn.net/weixin_43885787/article/details/86604452)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [详解Android中接口回调、方法回调](https://blog.csdn.net/qq_31881469/article/details/80089675)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值