重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Android进阶之使用第三方平台ShareSDK实现新浪微博的一键分享功能。
从网站建设到定制行业解决方案,为提供网站设计制作、网站制作服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。创新互联将不断加快创新步伐,提供优质的建站服务。
ShareSDK是一种社会化分享组件,为iOS、Android、WP8
的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理后台。ShareSDK移动开发者服务平台由广州掌淘网络科技有限公司开发。
1.Intent intent = new Intent(Intent.ACTION_SEND); //启动分享发送的属性
2. intent.setType("text/plain"); //分享发送的数据类型
3. intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); //分享的主题
4. intent.putExtra(Intent.EXTRA_TEXT, "extratext"); //分享的内容
5. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//这个也许是分享列表的背景吧
6. FenxiangActivity.this.startActivity(Intent.createChooser(intent, "分享"));//目标应用选择对话框的标题
然后在Manifest的Activity下面加上:
1.intent-filter Android:label="@string/albums_sendbyWBlog"
2. action Android:name="android.intent.action.SEND" /
3. data Android:mimeType="image/*" /
4. category Android:name="android.intent.category.DEFAULT" /
5. /intent-filter
我虽然对新浪SDK不熟,但仍然觉得应该确认两个地方:
1、requestToken确保不为空
2、uri.getQueryParameter("oauth_verifier")确保不为空。
这样你就能够定位到是哪个地方出空指针了!
本文介绍了如何在Android程序中使用新浪微博提供的AndroidSDK
微博Android平台SDK为第三方微博应用提供了文档易用的微博API调用服务,使第三方客户端无需了解复杂的验证,API调用过程。并可以实现分享到微博的功能,可以分享文字,或者多媒体信息到内置的分享页面,并发送到微博。
首先我们需要在新浪微博开放平台上进行注册,之后需要创建一个新的应用,并且需要记下应用的APP key,App Secret Key以及设置应用的回调页以便我们在程序中进行使用。此外,还需要在应用的高级信息里添加测试用户的uid,切记切记,否则会出现登陆不成功等怪现象。
接着我们下载微博提供的Android上的SDK,下载地址在这里http。//open。weibo。com/wiki/SDK,选择AndroidSDK进行下载即可。
使用方法:
首先将下载的sdk进行解压,并将其导入到eclipse中,接着在你需要使用sdk的android工程中点击右键,属性,设置library属性,选中刚才导入的weibosdk即可。如图所示
然后在你的工程的Manifest文件中,加入以下权限:
uses-permission android:name="android.permission.INTERNET"/uses-permission
uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/uses-permission
uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/uses-permission
uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/uses-permission
这样我们就能使用weibosdk了
建立工程以后如何在代码中使用weiboAPI呢,下面就由我来为大家介绍使用方法:
首先在你需要使用微博的Activity中加入以下代码:
Weibo weibo = Weibo.getInstance();
weibo.setupConsumerConfig(Constants.CONSUMER_KEY,Constants.CONSUMER_SECRET);
weibo.setRedirectUrl("Your URLhere");
weibo.authorize(this,
listener);
注意代码中的Constants.CONSUMER_KEY,Constants.CONSUMER_SECRET即是文章开头介绍的在微博上创建的应用里的两个key,setRedirectUrl中的内容即是在应用中设置的回调页。
Listener则是在进行登陆授权后对执行结果进行处理的Litener,代码如下
public class AuthDialogListener implements WeiboDialogListener {
private Activity context;
private String content;
private String file;
private float lat;
private float lon;
private static boolean isOver=true;
public AuthDialogListener(Activity context,String content,String file,float lat,float lon){
this.context= context;
this.content=content;
this.file=file;
this.lat=lat;
this.lon=lon;
}
@Override
public void onComplete(Bundle values) {
String token = values.getString("access_token");
String expires_in = values.getString("expires_in");
String oauth_verifier = values.getString("oauth_verifier");
AccessToken accessToken = new AccessToken(token, Constants.CONSUMER_SECRET);
accessToken.setExpiresIn(expires_in);
accessToken.setVerifier(oauth_verifier);
Weibo.getInstance().setAccessToken(accessToken);
try {
if (isOver) {
isOver=false;
share2weibo(this.content,null,listener,lat,lon);
}
} catch (WeiboException e) {
e.printStackTrace();
}
}
@Override
public void onError(DialogError e) {
Toast.makeText(context.getApplicationContext(),
"Auth error : " + e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onCancel() {
Toast.makeText(context.getApplicationContext(), "Auth cancel",
Toast.LENGTH_LONG).show();
}
@Override
public void onWeiboException(WeiboException e) {
Toast.makeText(context.getApplicationContext(),
"Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
.show();
}
private void share2weibo(String content,String file,RequestListener listener,float lat , float lon) throws WeiboException {
Weibo weibo = Weibo.getInstance();
WeiboParameters params= new WeiboParameters();
params.add("access_token", weibo.getAccessToken().getToken());
params.add("status", content);
params.add("lat", String.valueOf(lat));
params.add("long", String.valueOf(lon));
String url = Weibo.SERVER + "statuses/update.json";
if (file!=null!file.equalsIgnoreCase("")) {
params.add("pic", file);
url = Weibo.SERVER + "statuses/upload.json";
}
AsyncWeiboRunner runner = new AsyncWeiboRunner(weibo);
runner.request(this.context, url, params,Utility.HTTPMETHOD_POST,listener);
}
RequestListener listener= new RequestListener() {
@Override
public void onIOException(IOException e) {
isOver=true;
Toast.makeText(context, "RequestListener "+e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onError(WeiboException e) {
isOver=true;
Toast.makeText(context, "RequestListener "+e.getMessage(), Toast.LENGTH_LONG).show();
}
@Override
public void onComplete(String response) {
isOver=true;
Toast.makeText(context, "Success!", Toast.LENGTH_LONG).show();
}
};
}
需要完成WeiboDialogListener接口中的方法,分别是onComplete,OnError,
OnCancel,OnWeiboException。其中Oncomplete是在微博登陆授权成功后会执行的方法,在这个方法中,你可以调用你想要的功能如发表微博,转发,评论等。使用的代码可参看以下代码:
Weibo weibo = Weibo.getInstance();
WeiboParameters params= new WeiboParameters();
params.add("access_token", weibo.getAccessToken().getToken());
params.add("status", content);
params.add("lat", String.valueOf(lat));
params.add("long", String.valueOf(lon));
String url = Weibo.SERVER + "statuses/update.json";
AsyncWeiboRunner runner = new AsyncWeiboRunner(weibo);
runner.request(this.context,url,params,Utility.HTTPMETHOD_POST,listener);
其中params是调用weibo api中需要的具体参数,可根据需要进行添加
AsyncWeiboRunner 是用来执行具体请求的类,根据你设定的参数发起请求。注意这里又有一个listerner,而这个listener是对发起请求后的结果进行处理的回调类,
RequestListener listener= new RequestListener()
需要复写的方法有OnIOException,onError,onComplete,这样可以清楚地对各种情况进行处理。
这样在程序中就可以使用新浪微博 android sdk了。