package com.michael.doubanonline; import android.graphics.Bitmap; import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebViewClient; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.view.MenuItem; import com.michael.doubanonline.base.RefreshActionBarActivity; import com.michael.doubanonline.user.AccountCerfitication; import com.michael.doubanonline.user.AccountCerfitication.OnAccessTokenStateListener; import com.michael.doubanonline.user.AccountCerfitication.OnUserStateListener; import com.michael.doubanonline.user.UserInfo; import com.michael.doubanonline.util.L; /** * 豆瓣授权登录 * 只能获取用户信息,没有什么用了 * * */ public class CertificationActivity extends RefreshActionBarActivity { private static final String authorization_code_url_head = "https://www.douban.com/service/auth2/auth"; private WebView wvLogin; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_certification); setActionBar(); iniComponent(); } private void setActionBar() { ActionBar actionBar = getSupportActionBar(); actionBar.setTitle("授权登录"); actionBar.setIcon(this.getResources().getDrawable(R.drawable.ic_launcher)); actionBar.setDisplayHomeAsUpEnabled(true);// 让icon可以点击,并在icon的右边加上一个<箭头在onMenuItemSelected方法中被监听 actionBar.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.action_bar_bg)); actionBar.setDisplayShowCustomEnabled(true); } /** * 处理ActionBar的返回按钮 * */ @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { L.e("onMenuItemSelected", "itemID:" + item.getGroupId() + " " + item.getItemId()); switch (item.getItemId()) { case 16908332:// 这里只能先这样写了// TODO finish(); break; default: break; } return super.onMenuItemSelected(featureId, item); } private String authorization_code; private void iniComponent() { wvLogin = (WebView) findViewById(R.id.wvLogin); String URL = authorization_code_url_head + "?client_id=" + AccountCerfitication.apiKey + "&redirect_uri=" + AccountCerfitication.callbackMethod + "back&response_type=code&scope=shuo_basic_r,shuo_basic_w,douban_basic_common"; wvLogin.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { // 页面加载完毕 super.onPageFinished(view, url); setRefreshState(false); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // 页面开始加载时 super.onPageStarted(view, url, favicon); setRefreshState(true); L.e("URL:", url); if (url.startsWith(AccountCerfitication.result_msg_head)) { // 用户授权成功,可以获取authorization_code authorization_code = url.substring(AccountCerfitication.result_msg_head.length(), url.length()); // ToastUtil.show("authorization_code:" + authorization_code); wvLogin.stopLoading();// 停止链接的跳转 if (authorization_code != null && !authorization_code.equals("")) { // 启动一个线程去获取access_token final AccountCerfitication accountCerfitication = new AccountCerfitication(); accountCerfitication.setOnAccessTokenStateListener(new OnAccessTokenStateListener() { @Override public void onStart() { setRefreshState(true); } @Override public void onSuccess(String accessToken) { accountCerfitication.setOnUserStateListener(new OnUserStateListener() { @Override public void onSuccess(UserInfo userInfo) { } @Override public void onStart() { setRefreshState(true); } @Override public void onFinish() { setRefreshState(false); finish(); } @Override public void onFailure() { } }); accountCerfitication.getUserInfoByAccessToken(accessToken); } @Override public void onFinish() { setRefreshState(false); } @Override public void onFailure() { } }); accountCerfitication.getAccessTokenByAuthorizationCode(authorization_code); } } } }); wvLogin.loadUrl(URL); } }