首页 > 其他 > 详细

获取第三方的授权

时间:2014-02-11 09:25:57      阅读:414      评论:0      收藏:0      [点我收藏+]

   折腾了很久,终于找到了湖区第三方授权,然后通过授权,我们就可以发布一些自己想要的东西了。这里的代码,我也不是很懂,但是这个是一个独立的东西,大家如果实在不是很懂亦可以拿起去用。毕竟在我觉得,有很多代码,既然有现成的,就不必非要去弄得很透彻,只要懂大概思路以及逻辑就行了。

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

这里我会将代码贴出来:

 

package cn.android.share;

 

import java.io.File;

import java.io.FileOutputStream;

 

import cn.android.app.R;

import cn.sharesdk.framework.AbstractWeibo;

import cn.sharesdk.onekeyshare.ShareAllGird;

import android.app.Activity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.Bitmap.CompressFormat;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.os.Environment;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

 

/**

 * @author yangyu 功能描述:主Activity类,程序的入口类

 */

public class MainActivity extends Activity implements OnClickListener {

// 定义图片存放的地址

public static String TEST_IMAGE;

 

// 定义"账号登陆"按钮,"有分享界面按钮""无分享界面"按钮,"得到用户资料"按钮

private Button authLoginBtn, shareGuiBtn, shareBtn;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

 

// 初始化ShareSDK

AbstractWeibo.initSDK(this);

 

initImagePath();

 

initView();

 

initData();

}

 

/**

 * 初始化组件

 */

private void initView() {

authLoginBtn = (Button) findViewById(R.id.btnLogin);

shareGuiBtn = (Button) findViewById(R.id.btnShareAllGui);

shareBtn = (Button) findViewById(R.id.btnShareAll);

// getInfoBtn = (Button) findViewById(R.id.btnUserInfo);

}

 

/**

 * 初始化数据

 */

private void initData() {

// 设置按钮监听事件

authLoginBtn.setOnClickListener(this);

shareGuiBtn.setOnClickListener(this);

shareBtn.setOnClickListener(this);

// getInfoBtn.setOnClickListener(this);

}

 

/**

 * 初始化分享的图片

 */

private void initImagePath() {

try {// 判断SD卡中是否存在此文件夹

if (Environment.MEDIA_MOUNTED.equals(Environment

.getExternalStorageState())

&& Environment.getExternalStorageDirectory().exists()) {

TEST_IMAGE = Environment.getExternalStorageDirectory()

.getAbsolutePath() + "/dic.jpg";

} else {

TEST_IMAGE = getApplication().getFilesDir().getAbsolutePath()

+ "/dic.jpg";

}

File file = new File(TEST_IMAGE);

// 判断图片是否存此文件夹中

if (!file.exists()) {

file.createNewFile();

Bitmap pic = BitmapFactory.decodeResource(getResources(),

R.drawable.dic);

FileOutputStream fos = new FileOutputStream(file);

pic.compress(CompressFormat.JPEG, 100, fos);

fos.flush();

fos.close();

}

} catch (Throwable t) {

t.printStackTrace();

TEST_IMAGE = null;

}

}

 

/**

 * 按钮监听事件

 */

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btnLogin:

startActivity(new Intent(MainActivity.this, AuthActivity.class));

break;

case R.id.btnShareAllGui:

showGrid(false);

break;

case R.id.btnShareAll:

showGrid(true);

break;

// case R.id.btnUserInfo:

// // 获取自己的资料

// Intent i = new Intent(this, GetInforActivity.class);

// startActivity(i);

// break;

 default:

break;

}

 

}

 

/**

 * 使用快捷分享完成图文分享

 */

private void showGrid(boolean silent) {

Intent i = new Intent(this, ShareAllGird.class);

// 分享时Notification的图标

i.putExtra("notif_icon", R.drawable.ic_launcher);

// 分享时Notification的标题

i.putExtra("notif_title", this.getString(R.string.app_name));

 

// title标题,在印象笔记、邮箱、信息、微信(包括好友和朋友圈)、人人网和QQ空间使用,否则可以不提供

i.putExtra("title", this.getString(R.string.share));

// titleUrl是标题的网络链接,仅在人人网和QQ空间使用,否则可以不提供

i.putExtra("titleUrl", "http://sharesdk.cn");

// text是分享文本,所有平台都需要这个字段

i.putExtra("text", this.getString(R.string.share_content));

// imagePath是本地的图片路径,所有平台都支持这个字段,不提供,则表示不分享图片

i.putExtra("imagePath", MainActivity.TEST_IMAGE);

// url仅在微信(包括好友和朋友圈)中使用,否则可以不提供

i.putExtra("url", "http://sharesdk.cn");

// thumbPath是缩略图的本地路径,仅在微信(包括好友和朋友圈)中使用,否则可以不提供

i.putExtra("thumbPath", MainActivity.TEST_IMAGE);

// appPath是待分享应用程序的本地路劲,仅在微信(包括好友和朋友圈)中使用,否则可以不提供

i.putExtra("appPath", MainActivity.TEST_IMAGE);

// comment是我对这条分享的评论,仅在人人网和QQ空间使用,否则可以不提供

i.putExtra("comment", this.getString(R.string.share));

// site是分享此内容的网站名称,仅在QQ空间使用,否则可以不提供

i.putExtra("site", this.getString(R.string.app_name));

// siteUrl是分享此内容的网站地址,仅在QQ空间使用,否则可以不提供

i.putExtra("siteUrl", "http://sharesdk.cn");

 

// 是否直接分享

i.putExtra("silent", silent);

this.startActivity(i);

}

 

/**

 * action转换为String

 */

public static String actionToString(int action) {

switch (action) {

case AbstractWeibo.ACTION_AUTHORIZING:

return "ACTION_AUTHORIZING";

case AbstractWeibo.ACTION_GETTING_FRIEND_LIST:

return "ACTION_GETTING_FRIEND_LIST";

case AbstractWeibo.ACTION_FOLLOWING_USER:

return "ACTION_FOLLOWING_USER";

case AbstractWeibo.ACTION_SENDING_DIRECT_MESSAGE:

return "ACTION_SENDING_DIRECT_MESSAGE";

case AbstractWeibo.ACTION_TIMELINE:

return "ACTION_TIMELINE";

case AbstractWeibo.ACTION_USER_INFOR:

return "ACTION_USER_INFOR";

case AbstractWeibo.ACTION_SHARE:

return "ACTION_SHARE";

default: {

return "UNKNOWN";

}

}

}

 

protected void onDestroy() {

// 结束ShareSDK的统计功能并释放资源

AbstractWeibo.stopSDK(this);

super.onDestroy();

}

}

,上面是第一个类,然后还有:

package cn.android.share;

 

import java.util.HashMap;

 

import cn.android.app.R;

import cn.sharesdk.framework.AbstractWeibo;

import cn.sharesdk.framework.TitleLayout;

import cn.sharesdk.framework.WeiboActionListener;

import cn.sharesdk.renren.Renren;

import cn.sharesdk.sina.weibo.SinaWeibo;

import cn.sharesdk.tencent.qzone.QZone;

import cn.sharesdk.tencent.weibo.TencentWeibo;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Handler.Callback;

import android.os.Message;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.CheckedTextView;

import android.widget.Toast;

 

/**

 * @author yangyu

 * 功能描述:授权和取消授权Activity,由于UI显示需要授权过的平台显示账户的名称,

 *   因此此页面事实上展示的是“获取用户资料”和“取消授权”两个功能。

 */

public class AuthActivity extends Activity implements Callback, OnClickListener, WeiboActionListener {

//定义CheckedTextView对象

private CheckedTextView  sinaCt,qzoneCt,tengxunCt,renrenCt;

 

//定义Handler对象

private Handler handler;

 

//定义标题栏对象

private TitleLayout llTitle;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_auth);

 

initView();

 

initData();

}

 

/**

 * 初始化组件

 */

private void initView(){

//实例化Handler对象并设置信息回调监听接口

handler = new Handler(this);

 

//得到标题栏对象

llTitle = (TitleLayout) findViewById(R.id.llTitle);

 

//得到组件对象

sinaCt    = (CheckedTextView)findViewById(R.id.ctvSw);

qzoneCt   = (CheckedTextView)findViewById(R.id.ctvQz);

tengxunCt = (CheckedTextView)findViewById(R.id.ctvTc);

renrenCt  = (CheckedTextView)findViewById(R.id.ctvRr);

}

 

/**

 * 初始化数据

 */

private void initData(){

llTitle.getBtnBack().setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

finish();

}

});

llTitle.getTvTitle().setText("用户授权登录");

 

//设置监听

sinaCt.setOnClickListener(this);

qzoneCt.setOnClickListener(this);

tengxunCt.setOnClickListener(this);

renrenCt.setOnClickListener(this);

 

//获取平台列表

AbstractWeibo[] weibos = AbstractWeibo.getWeiboList(this);

 

for(int i = 0;i < weibos.length;i++){

if (!weibos[i].isValid()) {

continue;

}

 

CheckedTextView ctv = getView(weibos[i]);

if (ctv != null) {

ctv.setChecked(true);

// 得到授权用户的用户名称

String userName = weibos[i].getDb().get("nickname"); 

if (userName == null || userName.length() <= 0 || "null".equals(userName)) {

// 如果平台已经授权却没有拿到帐号名称,则自动获取用户资料,以获取名称

userName = getWeiboName(weibos[i]);

//添加平台事件监听

weibos[i].setWeiboActionListener(this);

//显示用户资料,null表示显示自己的资料

weibos[i].showUser(null);

}

ctv.setText(userName);

}

}

}

 

/**

 * CheckedTextView组件中显示授权用户的名称

 */

private CheckedTextView getView(AbstractWeibo weibo) {

if (weibo == null) {

return null;

}

 

String name = weibo.getName();

if (name == null) {

return null;

}

 

View v = null;

if (SinaWeibo.NAME.equals(name)) {

v = findViewById(R.id.ctvSw);

}

else if (TencentWeibo.NAME.equals(name)) {

v = findViewById(R.id.ctvTc);

}

else if (Renren.NAME.equals(name)) {

v = findViewById(R.id.ctvRr);

}

else if (QZone.NAME.equals(name)) {

v = findViewById(R.id.ctvQz);

}

 

if (v == null) {

return null;

}

 

if (! (v instanceof CheckedTextView)) {

return null;

}

 

return (CheckedTextView) v;

}

 

/**

 * 得到授权用户的用户名称

 */

private String getWeiboName(AbstractWeibo weibo) {

if (weibo == null) {

return null;

}

 

String name = weibo.getName();

if (name == null) {

return null;

}

 

int res = 0;

if (SinaWeibo.NAME.equals(name)) {

res = R.string.sinaweibo;

}

else if (TencentWeibo.NAME.equals(name)) {

res = R.string.tencentweibo;

}

else if (Renren.NAME.equals(name)) {

res = R.string.renren;

}

else if (QZone.NAME.equals(name)) {

res = R.string.qzone;

}

 

if (res == 0) {

return name;

}

return this.getResources().getString(res);

}

 

/**

 * 授权和取消授权的按钮点击监听事件

 */

@Override

public void onClick(View v) {

AbstractWeibo weibo = getWeibo(v.getId());

 

CheckedTextView ctv = (CheckedTextView) v;

if (weibo == null) {

ctv.setChecked(false);

ctv.setText(R.string.not_yet_authorized);

return;

}

 

if (weibo.isValid()) {

weibo.removeAccount();

ctv.setChecked(false);

ctv.setText(R.string.not_yet_authorized);

return;

}

 

weibo.setWeiboActionListener(this);

weibo.showUser(null);

}

 

/**

 * 获得授权

 */

private AbstractWeibo getWeibo(int vid) {

String name = null;

switch (vid) {

// 进入新浪微博的授权页面

case R.id.ctvSw:

name = SinaWeibo.NAME;

break;

// 进入腾讯微博的授权页面

case R.id.ctvTc:

name = TencentWeibo.NAME;

break;

// 进入人人网的授权页面

case R.id.ctvRr:

name = Renren.NAME;

break;

// 进入QQ空间的授权页面

case R.id.ctvQz:

name = QZone.NAME;

break;

}

 

if (name != null) {

return AbstractWeibo.getWeibo(this, name);

}

return null;

}

 

/**

 * 授权成功的回调

 *  weibo - 回调的平台

 * action - 操作的类型

 * res - 请求的数据通过res返回

 */

@Override

public void onComplete(AbstractWeibo weibo, int action,

HashMap<String, Object> arg2) {

Message msg = new Message();

msg.arg1 = 1;

msg.arg2 = action;

msg.obj = weibo;

handler.sendMessage(msg);

 

}

/**

 * 授权失败的回调

 */

@Override

public void onError(AbstractWeibo weibo, int action, Throwable t) {

t.printStackTrace();

 

Message msg = new Message();

msg.arg1 = 2;

msg.arg2 = action;

msg.obj = weibo;

handler.sendMessage(msg);

}

 

/**

 * 取消授权的回调

 */

@Override

public void onCancel(AbstractWeibo weibo, int action) {

Message msg = new Message();

msg.arg1 = 3;

msg.arg2 = action;

msg.obj = weibo;

handler.sendMessage(msg);

}

 

/** 

 * 处理从授权页面返回的结果

 * 

 * 如果获取到用户的名称,则显示名称;否则如果已经授权,则显示平台名称

 */

@Override

public boolean handleMessage(Message msg) {

AbstractWeibo weibo = (AbstractWeibo) msg.obj;

String text = MainActivity.actionToString(msg.arg2);

 

switch (msg.arg1) {

case 1: { // 成功

text = weibo.getName() + " completed at " + text;

Toast.makeText(this, text, Toast.LENGTH_SHORT).show();

}

break;

case 2: { // 失败

text = weibo.getName() + " caught error at " + text;

Toast.makeText(this, text, Toast.LENGTH_SHORT).show();

return false;

}

case 3: { // 取消

text = weibo.getName() + " canceled at " + text;

Toast.makeText(this, text, Toast.LENGTH_SHORT).show();

return false;

}

}

 

CheckedTextView ctv = getView(weibo);

if (ctv != null) {

ctv.setChecked(true);

String userName = weibo.getDb().get("nickname"); // getAuthedUserName();

if (userName == null || userName.length() <= 0

|| "null".equals(userName)) {

userName = getWeiboName(weibo);

}

ctv.setText(userName);

}

return false;

}

 

}

,当然在这里我们还需要一个辅助类(解析)

package cn.android.share;

 

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map.Entry;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

 

/**

 * @author yangyu

 * 功能描述:这是一个简易的Json-HashMap转换工具,可以将普通的json数据(字符串)

 * 转换为一个HashMap<Srting, Object>表格,也可以反过来操作。此外还支

 * 持将json数据格式化。

 */

public class JsonUtils {

 

/**

 * 将指定的json数据转成 HashMap<String, Object>对象

 */

public HashMap<String, Object> fromJson(String jsonStr) {

try {

if (jsonStr.startsWith("[")

&& jsonStr.endsWith("]")) {

jsonStr = "{\"fakelist\":" + jsonStr + "}";

}

 

JSONObject json = new JSONObject(jsonStr);

return fromJson(json);

} catch (Throwable t) {

t.printStackTrace();

}

return new HashMap<String, Object>();

}

 

private HashMap<String, Object> fromJson(JSONObject json) throws JSONException {

HashMap<String, Object> map = new HashMap<String, Object>();

@SuppressWarnings("unchecked")

Iterator<String> iKey = json.keys();

while(iKey.hasNext()) {

String key = iKey.next();

Object value = json.opt(key);

if (JSONObject.NULL.equals(value)) {

value = null;

}

if (value != null) {

if (value instanceof JSONObject) {

value = fromJson((JSONObject)value);

}

else if (value instanceof JSONArray) {

value = fromJson((JSONArray)value);

}

map.put(key, value);

}

}

return map;

}

 

private ArrayList<Object> fromJson(JSONArray array) 

throws JSONException {

ArrayList<Object> list = new ArrayList<Object>();

for (int i = 0, size = array.length(); i < size; i++) {

Object value = array.opt(i);

if (value instanceof JSONObject) {

value = fromJson((JSONObject)value);

}

else if (value instanceof JSONArray) {

value = fromJson((JSONArray)value);

}

list.add(value);

}

return list;

}

 

/**

 * 将指定的HashMap<String, Object>对象转成json数据 

 */

public String fromHashMap(HashMap<String, Object> map) {

try {

return getJSONObject(map).toString();

} catch (Throwable t) {

t.printStackTrace();

}

return "";

}

 

@SuppressWarnings("unchecked")

private JSONObject getJSONObject(HashMap<String, Object> map) 

throws JSONException {

JSONObject json = new JSONObject();

for (Entry<String, Object> entry : map.entrySet()) {

Object value = entry.getValue();

if (value instanceof HashMap<?, ?>) {

value = getJSONObject((HashMap<String, Object>)value);

}

else if (value instanceof ArrayList<?>) {

value = getJSONArray((ArrayList<Object>)value);

}

json.put(entry.getKey(), value);

}

return json;

}

 

@SuppressWarnings("unchecked")

private JSONArray getJSONArray(ArrayList<Object> list) 

throws JSONException {

JSONArray array = new JSONArray();

for (Object value : list) {

if (value instanceof HashMap<?, ?>) {

value = getJSONObject((HashMap<String, Object>)value);

}

else if (value instanceof ArrayList<?>) {

value = getJSONArray((ArrayList<Object>)value);

}

array.put(value);

}

return array;

}

 

/**

 * 格式化一个json

 */

public String format(String jsonStr) {

try {

return format("", fromJson(jsonStr));

} catch (Throwable t) {

t.printStackTrace();

}

return "";

}

 

@SuppressWarnings("unchecked")

private String format(String sepStr, HashMap<String, Object> map) {

StringBuffer sb = new StringBuffer();

sb.append("{\n");

String mySepStr = sepStr + "\t";

int i = 0;

for (Entry<String, Object> entry : map.entrySet()) {

if (i > 0) {

sb.append(",\n");

}

sb.append(mySepStr).append(‘\"‘).append(entry.getKey()).append("\":");

Object value = entry.getValue();

if (value instanceof HashMap<?, ?>) {

sb.append(format(mySepStr, (HashMap<String, Object>)value));

}

else if (value instanceof ArrayList<?>) {

sb.append(format(mySepStr, (ArrayList<Object>)value));

}

else if (value instanceof String) {

sb.append(‘\"‘).append(value).append(‘\"‘);

}

else {

sb.append(value);

}

i++;

}

sb.append(‘\n‘).append(sepStr).append(‘}‘);

return sb.toString();

}

 

@SuppressWarnings("unchecked")

private String format(String sepStr, ArrayList<Object> list) {

StringBuffer sb = new StringBuffer();

sb.append("[\n");

String mySepStr = sepStr + "\t";

int i = 0;

for (Object value : list) {

if (i > 0) {

sb.append(",\n");

}

sb.append(mySepStr);

if (value instanceof HashMap<?, ?>) {

sb.append(format(mySepStr, (HashMap<String, Object>)value));

}

else if (value instanceof ArrayList<?>) {

sb.append(format(mySepStr, (ArrayList<Object>)value));

}

else if (value instanceof String) {

sb.append(‘\"‘).append(value).append(‘\"‘);

}

else {

sb.append(value);

}

i++;

}

sb.append(‘\n‘).append(sepStr).append(‘]‘);

return sb.toString();

}

 

}

。好了,可能大家也会有迷糊,但是我贴出了源文件。

获取第三方的授权

原文:http://www.cnblogs.com/Catherine-Brain/p/3543772.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!