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

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

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

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

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

2、在Manifest.xml里注冊(cè)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,昵稱,圖像等資料。這里有一點(diǎn)要注意的是,由于QQ服務(wù)器返回OPENID和昵稱等其他資料是分兩步進(jìn)行的,而首先返回的OPENID速度很快,返回昵稱等其他資料可能會(huì)比較慢,所以在返回OPENID的時(shí)候,就可以認(rèn)為已經(jīng)調(diào)用QQ登錄成功,再用異步的方式處理昵稱等其他資料信息。以下是代碼部 分,已經(jīng)過項(xià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 這里要替換成自己申請(qǐng)的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)用第三方登錄的詳細(xì)步驟和思路,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • Android升級(jí)支持庫版本遇到的兩個(gè)問題詳解

    Android升級(jí)支持庫版本遇到的兩個(gè)問題詳解

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

    Android 超詳細(xì)SplashScreen入門教程

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

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

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

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

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

    Android Apt之Activity Route的示例

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

    Android畫畫板的制作方法

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

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

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

    深入淺析 Android Fragment(上篇)

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

    Android自定義View實(shí)現(xiàn)拖動(dòng)自動(dòng)吸邊效果

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

    android 通知Notification詳解及實(shí)例代碼

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

最新評(píng)論

宁国市| 宜州市| 兰溪市| 田东县| 通山县| 鱼台县| 洱源县| 平阴县| 唐海县| 鄂温| 县级市| 芦山县| 舒城县| 青浦区| 夹江县| 嘉义县| 文成县| 德钦县| 台南县| 凤山市| 清徐县| 苏尼特右旗| 寿宁县| 光泽县| 隆回县| 三台县| 沿河| 综艺| 乌兰察布市| 银川市| 巴楚县| 美姑县| 紫金县| 牟定县| 伊川县| 光山县| 双鸭山市| 恩施市| 凤庆县| 绥宁县| 赫章县|