最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android調(diào)用第三方QQ登錄代碼分享

 更新時間:2016年05月31日 11:42:27   投稿:lijiao  
現(xiàn)在的項目開發(fā),調(diào)用第三方登錄,幾乎是必須的,這篇文章主要介紹了Android調(diào)用第三方QQ登錄代碼分享

本文為大家分享了調(diào)用QQ登錄的相關(guān)代碼,希望對大家有幫助,減少項目開發(fā)的時間,具體內(nèi)容如下

1、去QQ開放平臺注冊帳號(http://open.qq.com/),為應(yīng)用申請QQ的APP_ID , 并下載相關(guān)的jar包,放到工程的lib目錄下。

2、在Manifest.xml里注冊QQ相關(guān)的Activity,代碼如下

 <activity 
android:name="com.tencent.connect.common.AssistActivity" 
android:screenOrientation="portrait" 
android:theme="@android:style/Theme.Translucent.NoTitleBar" />   
<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="tencent100491239" /> 
 </intent-filter> 
</activity> 

3、利用QQ提供的相關(guān)API去獲取相關(guān)的OPENID,昵稱,圖像等資料。這里有一點要注意的是,由于QQ服務(wù)器返回OPENID和昵稱等其他資料是分兩步進行的,而首先返回的OPENID速度很快,返回昵稱等其他資料可能會比較慢,所以在返回OPENID的時候,就可以認為已經(jīng)調(diào)用QQ登錄成功,再用異步的方式處理昵稱等其他資料信息。以下是代碼部 分,已經(jīng)過項目測試,可直接用(替換相應(yīng)的APP_ID就可以了)

import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.SocketTimeoutException; 
 
import org.apache.http.conn.ConnectTimeoutException; 
import org.json.JSONException; 
import org.json.JSONObject; 
 
import android.app.Activity; 
 
import com.smart.util.BroadcastAction; 
import com.smart.util.BroadcastUtil; 
import com.smart.util.Constant; 
import com.smart.util.ILog; 
import com.smart.util.PrefUtil; 
import com.smart.util.Prefkey; 
import com.tencent.open.HttpStatusException; 
import com.tencent.open.NetworkUnavailableException; 
import com.tencent.tauth.Constants; 
import com.tencent.tauth.IRequestListener; 
import com.tencent.tauth.IUiListener; 
import com.tencent.tauth.Tencent; 
import com.tencent.tauth.UiError; 
import com.utils.lib.ss.common.ToastHelper; 
 
/** 
 * QQ登陸。 
 * @author E 
 */ 
public class QqLogin { 
  
 private static QqLogin qqLogin = null; 
  
 public static QqLogin getInstance(){ 
  if (null == qqLogin) { 
   qqLogin = new QqLogin(); 
  } 
  return qqLogin; 
 } 
  
 public void login(Activity context , QqLoginListener loginListener){ 
  //Constant.QQ_APP_ID 這里要替換成自己申請的APP_ID 
  Tencent tencent = Tencent.createInstance(Constant.QQ_APP_ID, context); 
  if (null == tencent) { 
   ToastHelper.makeText(context, "error cased !"); 
   return; 
  } 
  tencent.login(context, "get_user_info", new BaseUiListener(tencent,loginListener)); 
 } 
  
 class BaseUiListener implements IUiListener{ 
 
  Tencent tencent = null; 
  QqLoginListener qqLoginListener = null; 
   
  public BaseUiListener(Tencent tencent ,QqLoginListener qqLoginListener) { 
   super(); 
   this.tencent = tencent; 
   this.qqLoginListener = qqLoginListener; 
  } 
 
  @Override 
  public void onComplete(JSONObject values) { 
   try { 
    String openid = values.getString("openid"); 
    qqLoginListener.onLoginSuccess(openid); 
    tencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null, Constants.HTTP_GET, 
      new BaseApiListener(qqLoginListener) ,null); 
   } catch (Exception e) { 
    e.printStackTrace(); 
   } 
  } 
  @Override 
  public void onError(UiError arg0) { 
   qqLoginListener.onLoginFail(); 
  } 
   
  @Override 
  public void onCancel() { 
   qqLoginListener.onCancel(); 
  } 
 } 
  
 class BaseApiListener implements IRequestListener{ 
   
   QqLoginListener qqLoginListener = null; 
 
  public BaseApiListener(QqLoginListener qqLoginListener) { 
   super(); 
   this.qqLoginListener = qqLoginListener; 
  } 
  @Override 
  public void onComplete(JSONObject jsonObject, Object object) { 
   try { 
    ILog.e(jsonObject.toString()); 
    String nickName = jsonObject.getString("nickname"); 
    String figureurl_qq_1 = jsonObject.getString("figureurl_qq_2"); 
    PrefUtil.instance().setPref(Prefkey.THIRD_NICKNAME, nickName); 
    PrefUtil.instance().setPref(Prefkey.THIRD_IMAGE, figureurl_qq_1); 
    //發(fā)送廣播到主頁去更新 
    BroadcastUtil.sendBroadcast(BroadcastAction.UPLOAD_THIRD_INFO); 
   } catch (Exception e) { 
    e.printStackTrace(); 
   } 
  } 
  @Override 
  public void onConnectTimeoutException(ConnectTimeoutException arg0, 
    Object arg1) { 
  } 
  @Override 
  public void onHttpStatusException(HttpStatusException arg0, Object arg1) { 
    
  } 
  @Override 
  public void onIOException(IOException arg0, Object arg1) { 
    
  } 
  @Override 
  public void onJSONException(JSONException arg0, Object arg1) { 
    
  } 
  @Override 
  public void onMalformedURLException(MalformedURLException arg0, 
    Object arg1) { 
  } 
  @Override 
  public void onNetworkUnavailableException( 
    NetworkUnavailableException arg0, Object arg1) { 
  } 
  @Override 
  public void onSocketTimeoutException(SocketTimeoutException arg0, 
    Object arg1) { 
  } 
  @Override 
  public void onUnknowException(Exception arg0, Object arg1) { 
  } 
 } 
  
 /** 
  * 授權(quán)完成后,執(zhí)行一下步的回調(diào) 
  */ 
 public static abstract class QqLoginListener{ 
  public void onLoginSuccess(String openid){}; 
  public void onLoginSuccess(String openid, String nickname){}; 
  public void onLoginFail(){}; 
  public void onCancel(){}; 
 } 

好了,到里代碼部分已經(jīng)寫完,只需要調(diào)用login(Activity context , QqLoginListener loginListener)方法就可以了。

以上就是Android調(diào)用第三方登錄的詳細步驟和思路,希望對大家的學(xué)習有所幫助。

相關(guān)文章

  • Android升級支持庫版本遇到的兩個問題詳解

    Android升級支持庫版本遇到的兩個問題詳解

    安卓平臺其中一個很牛逼的地方在于它支持各種不同的設(shè)備。從你的平板電腦,到你的手機,電視等,安卓無處不在。這篇文章主要給大家介紹了關(guān)于Android升級支持庫版本遇到的兩個問題,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • Android 超詳細SplashScreen入門教程

    Android 超詳細SplashScreen入門教程

    Android 12正式版即將發(fā)布,有一個非常顯著的視覺變化就是,Android 12強制給所有的App都增加了SplashScreen的功能。是的,即使你什么都不做,只要你的App安裝到了Android 12手機上,都會自動擁有這個新功能
    2022-03-03
  • Android開發(fā)實現(xiàn)的圓角按鈕、文字陰影按鈕效果示例

    Android開發(fā)實現(xiàn)的圓角按鈕、文字陰影按鈕效果示例

    這篇文章主要介紹了Android開發(fā)實現(xiàn)的圓角按鈕、文字陰影按鈕效果,涉及Android界面布局與屬性設(shè)置相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • Android實現(xiàn)地理定位功能

    Android實現(xiàn)地理定位功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)地理定位功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android Apt之Activity Route的示例

    Android Apt之Activity Route的示例

    本篇文章主要介紹了Android Apt之Activity Route的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android畫畫板的制作方法

    Android畫畫板的制作方法

    這篇文章主要為大家詳細介紹了Android畫畫板的制作方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • android獲取圖片尺寸的兩種方式及bitmap的縮放操作

    android獲取圖片尺寸的兩種方式及bitmap的縮放操作

    這篇文章主要介紹了android獲取圖片尺寸的兩種方式及bitmap的縮放操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 深入淺析 Android Fragment(上篇)

    深入淺析 Android Fragment(上篇)

    本篇文章為大家說明Fragment如何產(chǎn)生,什么是Fragment,F(xiàn)ragment生命周期,如何靜態(tài)和動態(tài)的使用Fragment,F(xiàn)ragment回退棧,F(xiàn)ragment事務(wù);以及Fragment的一些特殊用途。感興趣的朋友一起跟著小編一起看看吧
    2015-10-10
  • Android自定義View實現(xiàn)拖動自動吸邊效果

    Android自定義View實現(xiàn)拖動自動吸邊效果

    這篇文章主要為大家詳細介紹了Android自定義View實現(xiàn)拖動自動吸邊效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • android 通知Notification詳解及實例代碼

    android 通知Notification詳解及實例代碼

    這篇文章主要介紹了android 通知Notification詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-12-12

最新評論

杂多县| 青海省| 井研县| 泰州市| 赤水市| 达州市| 石阡县| 蓬溪县| 阿巴嘎旗| 高陵县| 盈江县| 海南省| 齐齐哈尔市| 乐至县| 安国市| 南投市| 丘北县| 乌苏市| 兰坪| 蒙山县| 营山县| 小金县| 忻州市| 萍乡市| 平遥县| 桂阳县| SHOW| 新竹市| 津南区| 蓬莱市| 三门峡市| 光山县| 福清市| 益阳市| 万载县| 威海市| 日土县| 博湖县| 信宜市| 蒲城县| 和林格尔县|