新浪微博开发之授权的实现(二)

接着上篇继续,如果没有授权用户则跳转到授权页:


为了节省时间我使用了android SDK进行开发,SDK下载地址:新浪微博SDK(android版)这里不是官方的SDK,是Weibo4Android。

在原有SDK基础上新建OAuthActivity:

package com.cloay.weibo.ui;

import weibo4android.Weibo;
import weibo4android.WeiboException;
import weibo4android.http.RequestToken;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;

import com.cloay.weibo.R;
import com.cloay.weibo.WeiBoActivity;
import com.cloay.weibo.constants.OAuthConstant;
import com.cloay.weibo.utils.AlertDlgUtil;
import com.cloay.weibo.utils.CheckNetUtil;
/**
 * 如果未授权或者授权已过期,获取授权accessToken
 * 并跳转到OAuthResult
 * @author Cloay
 * 2012-2-25
 * 下午08:14:01
 */
public class OauthActivity extends WeiBoActivity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
		super.onCreate(savedInstanceState);
		setContentView(R.layout.oauth);
		
		System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);
    	System.setProperty("weibo4j.oauth.consumerSecret", Weibo.CONSUMER_SECRET);
		Button loginBtn = (Button) findViewById(R.id.oauthButton);
		loginBtn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(CheckNetUtil.checkNet(OauthActivity.this)){//检查网络是否可用,如果可用
					//进行授权提示授权
					Weibo weibo = new Weibo();
	            			RequestToken requestToken;
					try {
						requestToken = weibo.getOAuthRequestToken("cloay://OauthResult");//注意下面说明1
		    			OAuthConstant.getInstance().setRequestToken(requestToken);
						Uri uri = Uri.parse(requestToken.getAuthenticationURL()+ "&display=mobile");
		    			startActivity(new Intent(Intent.ACTION_VIEW, uri));
		    			OauthActivity.this.finish();
					} catch (WeiboException e) {
						e.printStackTrace();
					}
	    			
				}else{//如果网络不可用
					System.out.println("网络不正常");
					AlertDlgUtil.alertDialogNetErr(OauthActivity.this);
				}
			}

		});
	}

}
说明1:这里是用户授权后返回的地址即callback_url。注意授权时请使用系统自带浏览器,不要使用uc。不然授权后不能正常返回!

我们还要注意在OauthActivity的清单中包含以下信息:

<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="cloay" android:host="OauthResult" /> 
</intent-filter>

授权成功后保存用户授权信息,包括accessToken及用户相关信息,发表下次登录使用。OauthResult类代码:

package com.cloay.weibo.ui;

import java.util.HashMap;

import com.cloay.weibo.R;
import com.cloay.weibo.constants.Constant;
import com.cloay.weibo.constants.OAuthConstant;
import com.cloay.weibo.service.MainService;
import com.cloay.weibo.service.Task;

import weibo4android.User;
import weibo4android.Weibo;
import weibo4android.WeiboException;
import weibo4android.http.AccessToken;
import weibo4android.http.RequestToken;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
/**
 * 授权成功后界面
 * @author Cloay
 * 2012-2-25
 * 下午07:34:44
 */
public class OauthResult extends Activity {
	private LinearLayout layoutProgress;   //授权进度条
	private LinearLayout oauthDialog;   //授权成功对话框
	private Weibo weibo = OAuthConstant.getInstance().getWeibo();
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.oauth_success);
		
		layoutProgress = (LinearLayout) findViewById(R.id.progressBar);
		oauthDialog = (LinearLayout) findViewById(R.id.oauth_dialog);
		Button button=  (Button) findViewById(R.id.oauthSuccessBtn);
		button.setOnClickListener(new Button.OnClickListener()
        {
			 public void onClick( View v )
	         {
	    		Intent intent = new Intent(OauthResult.this, MainActivity.class);
	    		startActivity(intent);
	    		OauthResult.this.finish();
	         }
        } );
		
		saveOauth();   //保存已授权用户信息
	}
	
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if(msg.what == Constant.GET_DATA_NORMAL){ //授权成功
				layoutProgress.setVisibility(View.GONE); //关闭进度条
				oauthDialog.setVisibility(View.VISIBLE);  //显示对话框
			}
		}
		
	};
	
	/**
	 * 保存已授权用户信息
	 */
	private void saveOauth() {
		Uri uri=this.getIntent().getData();
		try {
			RequestToken requestToken = OAuthConstant.getInstance().getRequestToken();
			AccessToken accessToken = requestToken.getAccessToken(uri.getQueryParameter("oauth_verifier"));
			OAuthConstant.getInstance().setAccessToken(accessToken);
//			TextView textView = (TextView) findViewById(R.id.TextView01);
//			textView.setText("得到AccessToken的key和Secret,可以使用这两个参数进行授权登录了.\n Access token:\n"+accessToken.getToken()+"\n Access token secret:\n"+accessToken.getTokenSecret());
			//保存已授权用户信息
			weibo.setOAuthAccessToken(accessToken);
			User user = weibo.verifyCredentials();
			
			//使用service后台保存用户信息
			HashMap<String,User> parms = new HashMap<String, User>();
			parms.put("user", user);
			Task task = new Task(Task.SAVE_USER, parms);
			MainService.allTask.add(task);
			
			//让程序继续运行
			Message message = Message.obtain();
			message.what = Constant.GET_DATA_NORMAL;
			handler.sendMessage(message);
		} catch (WeiboException e) {
			e.printStackTrace();
		}
	}
}
授权及授权成功后界面:

             


关于授权就写那么多!有什么问题欢迎留言大家一起交流学习!

说明:转载请注明出处!




setContentView(R.layout.main); frameLayout = (FrameLayout) findViewById(R.id.dialogfram); (((ViewGroup) findViewById(android.R.id.content)).getChildAt(0)).setBackgroundColor(Color.parseColor("#ff121111")); // //hide the actionBar getActionBar().hide(); setupMenu(); cache = ACache.get(MainActivity.this); boolean isConn = NetUtil.checkNet(MainActivity.this); if (isConn) { // Log.i("ht","has conn========"); }else{ // Log.i("ht","no conn========"); FrameLayout frameLayout = (FrameLayout) findViewById(R.id.dialogfram); frameLayout.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { // TODO Auto-generated method stub return true; } }); frameLayout.setVisibility(View.VISIBLE); TextView textOk = (TextView) findViewById(R.id.dialogfram).findViewById(R.id.ok); TextView textCancel = (TextView) findViewById(R.id.dialogfram).findViewById(R.id.cancle); textOk.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // Log.d("html","====textOk====="); Intent intent = new Intent(Settings.ACTION_SETTINGS); startActivity(intent); findViewById(R.id.dialogfram).setVisibility(View.GONE); } }); textCancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // Log.d("html","====textCancel====="); findViewById(R.id.dialogfram).setVisibility(View.GONE); } }); } sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE); changeFragment(new CloudFragment()); // ImageView imageShare = (ImageView) findViewById(R.id.action_bar_id).findViewById(R.id.share_image); imageShare.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { } }); } private void setupMenu(){ mResideMenu = new ResideMenu(this); mResideMenu.setBackground(R.drawable.menu_background);//设置北京图片 mResideMenu.attachToActivity(this); mResideMenu.setMenuListener(mMenuListener); mResideMenu.setScaleValue(0.4f); mMenu_name = getResources().getStringArray(R.array.menu_array); this.mMenu_cloud = new ResideMenuItem(this, R.drawable.mojitip_17, mMenu_name[0]); this.mMenu_mobile = new ResideMenuItem(this, R.drawable.mojitip_13, mMenu_name[1]); this.mMenu_industry = new ResideMenuItem(this, R.drawable.mojitip_14, mMenu_name[2]); this.mMenu_magzine = new ResideMenuItem(this, R.drawable.mojitip_15, mMenu_name[3]); this.mMenu_blog = new ResideMenuItem(this,R.drawable.mojitip_16,mMenu_name[4]); this.mMenu_save = new ResideMenuItem(this,R.drawable.mojitip_24,mMenu_name[5]); this.mMenu_settings = new ResideMenuItem(this,R.drawable.mojitip_26,mMenu_name[6]); this.mMenu_exit = new ResideMenuItem(this,R.drawable.exit,mMenu_name[7]); this.mMenu_cloud.setOnClickListener(this); this.mMenu_industry.setOnClickListener(this); this.mMenu_magzine.setOnClickListener(this); this.mMenu_mobile.setOnClickListener(this); this.mMenu_blog.setOnClickListener(this); this.mMenu_settings.setOnClickListener(this); this.mMenu_save.setOnClickListener(this); this.mMenu_exit.setOnClickListener(this); mResideMenu.addMenuItem(mMenu_cloud, ResideMenu.DIRECTION_LEFT); mResideMenu.addMenuItem(mMenu_mobile, ResideMenu.DIRECTION_LEFT); mResideMenu.addMenuItem(mMenu_industry, ResideMenu.DIRECTION_LEFT); mResideMenu.addMenuItem(mMenu_magzine, ResideMenu.DIRECTION_LEFT); mResideMenu.addMenuItem(mMenu_blog, ResideMenu.DIRECTION_LEFT); mResideMenu.addMenuItem(mMenu_save,ResideMenu.DIRECTION_LEFT); mResideMenu.addMenuItem(mMenu_settings,ResideMenu.DIRECTION_LEFT); mResideMenu.addMenuItem(mMenu_exit,ResideMenu.DIRECTION_LEFT); ImageView toggleIv = (ImageView) findViewById(R.id.openMenuBtn); //open menu toggleIv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mResideMenu.openMenu(ResideMenu.DIRECTION_LEFT); } }); //set default title this.setActionBarTitle(mMenu_name[0]); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { return mResideMenu.dispatchTouchEvent(ev); } private ResideMenu.OnMenuListener mMenuListener = new ResideMenu.OnMenuListener() { @Override public void openMenu() { // Toast.makeText(MainActivity.this, "Menu is opened!", Toast.LENGTH_SHORT).show(); } @Override public void closeMenu() { // Toast.makeText(MainActivity.this, "Menu is closed!", Toast.LENGTH_SHORT).show(); } }; private void changeFragment(Fragment targetFragment){ frameLayout.setVisibility(View.GONE); mResideMenu.clearIgnoredViewList(); getSupportFragmentManager() .beginTransaction() .replace(R.id.main_fragment, targetFragment, "fragment") .setTransitionStyle(FragmentTransaction.TRANSIT_FRAGMENT_FADE) .commit(); } /** * set title * @param title title name */ public void setActionBarTitle(String title){ TextView titleTv = (TextView) findViewById(R.id.title); titleTv.setText(title); System.out.println("title:"+titleTv.getText().toString()); } @Override public void onClick(View view) { if (view == mMenu_cloud){ setActionBarTitle(mMenu_name[0]); changeFragment(new CloudFragment()); }else if (view == mMenu_industry){ setActionBarTitle(mMenu_name[2]); changeFragment(new IndustryFragment()); }else if (view == mMenu_magzine){ setActionBarTitle(mMenu_name[3]); changeFragment(new Magzine()); }else if (view == mMenu_mobile){ setActionBarTitle(mMenu_name[1]); changeFragment(new Mobile()); }else if (view == mMenu_blog){ setActionBarTitle(mMenu_name[4]); changeFragment(new SoftDevFragment()); }else if (view == mMenu_settings){ setActionBarTitle(mMenu_name[6]); changeFragment(new SettingFragment()); }else if (view == mMenu_save) { setActionBarTitle(mMenu_name[5]); changeFragment(new MySaveFragment()); }else if (view == mMenu_exit) { TextView textTitle = (TextView) frameLayout.findViewById(R.id.title); TextView textSure = (TextView) frameLayout.findViewById(R.id.delete); TextView textOk = (TextView) frameLayout.findViewById(R.id.ok); TextView textCancel = (TextView) frameLayout.findViewById(R.id.cancle); textTitle.setText("确定退出"); textSure.setVisibility(View.GONE); frameLayout.setVisibility(View.VISIBLE); textOk.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { MainActivity.this.finish(); } }); textCancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { frameLayout.setVisibility(View.GONE); } }); }
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值