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