废话不说,开始正题。
- 进入新浪微博提供的开放平台http://open.weibo.com/ 注册新浪账号。
- 点击’我是开发者‘,创建一个应用,如果有账号,当然就省事了,得到CONSUMER_KEY和CONSUMER_SECRET,保存这两个值。
- 下载新浪提供的Android SDK,地址:http://code.google.com/p/weibo-android-sdk/downloads/list
- 解压下载的压缩包,解压完后,大家可以看到,它其实是Android SDK分享新浪微博的简单项目文件,将该项目导入到eclipse即可
- 然后,在复制到项目中的com.weibo.net包下找到Weibo.java文件,修改CONSUMER_KEY和CONSUMER_SECRET的值,与第二点是提到的值对应,
- 在com.weibo.android包下的AuthorizeActivity.java文件中,还可以采用另外一种方式,如:
public void onClick(View v) { // TODO Auto-generated method stub if(v == mLogin){ //将CONSUMER_KEY、CONSUMER_KEY的值在此文件中定义,初始时为Weibo对象设置该值 Weibo weibo = Weibo.getInstance(); weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_KEY); try { //直接在Weibo.java中定义为static,需要调用的地方直接调用 /*AccessToken at = weibo.getXauthAccessToken(TextActivity.this, Weibo.APP_KEY, Weibo.APP_SECRET, "", ""); mToken.setText(at.getToken());*/ RequestToken requestToken = weibo.getRequestToken(AuthorizeActivity.this, Weibo.APP_KEY, Weibo.APP_SECRET, AuthorizeActivity.URL_ACTIVITY_CALLBACK); mToken.setText(requestToken.getToken()); Uri uri = Uri.parse(Weibo.URL_AUTHENTICATION + "?display=wap2.0&oauth_token=" + requestToken.getToken() + "&from=" + AuthorizeActivity.FROM); startActivity(new Intent(Intent.ACTION_VIEW, uri)); }catch (WeiboException e){ e.printStackTrace(); } } }
- AuthorizeActivity和TestActivity代码所对应的java文件都需要在AndroidManifest.xml中注册。 如下:
在文件AuthorizeActivity.java中有回调地址,和上面代码中的scheme、host对应即可:<activity android:configChanges="keyboardHidden|orientation" android:name=".TestActivity"> <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="weiboandroid" android:host="TestActivity" /> //这里scheme host 在AndroidExample对应文件跳转时会用到,scheme写项目名称即可,host写授权后要跳转到的Activity名字 </intent-filter> </activity>
private static final String URL_ACTIVITY_CALLBACK = "weiboandroid://TestActivity"
- 到此,项目基本可以运行起来了,但是当你选择用非系统浏览器(如QQ、UC等)打开新浪授权页面时,填写完信息,点击授权,问题出现了,找不到页面。所以我们需要修改下,将其于系统浏览器绑定,此修改在AuthorizeActivity.java文件中,如下:
public void onClick(View v) { // TODO Auto-generated method stub if(v == mLogin){ Weibo weibo = Weibo.getInstance(); weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET); try { /*AccessToken at = weibo.getXauthAccessToken(TextActivity.this, Weibo.APP_KEY, Weibo.APP_SECRET, "", ""); mToken.setText(at.getToken());*/ RequestToken requestToken = weibo.getRequestToken(AuthorizeActivity.this, Weibo.APP_KEY, Weibo.APP_SECRET, AuthorizeActivity.URL_ACTIVITY_CALLBACK); mToken.setText(requestToken.getToken()); Uri uri = Uri.parse(Weibo.URL_AUTHENTICATION + "?display=wap2.0&oauth_token=" + requestToken.getToken() + "&from=" + AuthorizeActivity.FROM); Intent intent = new Intent(Intent.ACTION_VIEW, uri); //与系统浏览器绑定,用系统浏览器打开授权页面 intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity"); startActivity(intent); }catch (WeiboException e){ e.printStackTrace(); } }
- 修改发布的图片的地址,在TestActivity.java文件中,如下:
public void onClick(View v) { File file = Environment.getExternalStorageDirectory(); String sdPath = file.getAbsolutePath(); /********************修改地址,因为你的存储卡中可能没有这张图片,改为有的图片即可***************************/ String picPath = sdPath + "/" + "abc.jpg"; try { share2weibo("abc", picPath); Intent i = new Intent(TestActivity.this, ShareActivity.class); TestActivity.this.startActivity(i); }catch (WeiboException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ } }
- 到此,基本搞定,可是还是美中不足,不能发网络图片,大家不急,在com.weibo.net包下的Utility.java文件中做如下修改即可实现网络图片的使用:
在该文件中,添加如下方法:
在该文件的288行左右,做如下修改,将第一行注释后改为第三行代码:public static Bitmap returnBitMap(String url) { URL myFileUrl = null; Bitmap bitmap = null; try { myFileUrl = new URL(url); } catch (MalformedURLException e) { e.printStackTrace(); } try { HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection(); conn.setDoInput(true); conn.connect(); InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); is.close(); } catch (IOException e) { e.printStackTrace(); } return bitmap; }
//Bitmap bf = BitmapFactory.decodeFile(file); //将原来的注释,改为利用网络图片 Bitmap bf = returnBitMap(file);
到此,大功告成!