Hoje tenho um estudo sobre a API de Sina Weibo e agora percebi a função de publicar o Weibo, incluindo o Weibo com fotos. Para segurança, a API do Sina Weibo não fornece a função de fazer login com uma senha da conta do Weibo, mas usa a autorização do OAuth. Os usuários acessam os sites do SINA através dos navegadores para fazer login. Após o login com sucesso, o navegador retorna a chave e o segredo do programa.
main.xml:
<? xml versão = "1.0" coding = "utf-8"?> <linearlayout xmlns: Android = "http://schemas.android.com/apk/res/android" Android: Orientation = "Vertical: Android: Layout_width =" Fill_PARE " Android: layout_width = "FILL_PARENT" Android: layout_height = "wrap_content" Android: id = "@+id/login" Android: text = "Login"/> <edittExt Android: id = "@+id/status: Android: Layout_width =" Fill_Ent: Android: Hint = "Digite Weibo Message" /> <Button Android: Layout_Width = "Fill_Parent" Android: layout_height = "wrap_content" Android: id = "@+id /send" Android: Text = "Publish" /> < /linearlayout>
Um botão de login, uma caixa de entrada e um botão de publicação porque deseja receber dados retornados pelo navegador, você precisa adicionar um filtro de intenção ao registrar uma atividade no androidmanifest.xml.
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.pocketdigi.weibo" android:versionCode="1" android:versionName="1.0"> <uses-sdk Android: minsdkversion = "7" /> <Application Android: icon = "@drawable /icon" Android: label = "@String /App_name"> <Intent-filter> <Ação Android: name = "Android.Intent.Action.main" /> <category Android: Name = "Android.Innt.Intent.Action.main" /> <Categoria Android: Name = "> <Tent-Filter> <Ação Android: name = "Android.intent.action.view" /> <Categoria Android: name = "Android.intent.category.default" /> <categoria Android: name = "Android.intent.categy.browsable: Sina: // weibo--> </intent-filter> </itivity> </application> <usa-permission Android: name = "Android.permission.internet"> </saus-permission> </san Manifest>
O filtro de intenção deve ser escrito em dois parágrafos. Se escrito juntos, não será iniciado.
Para simplificar, basta copiar a classe Oauthconstant na amostra de Sina:
pacote weibo4android.androidexamples; importação weibo4android.weibo; importar weibo4android.http.accesstoken; importar weibo4android.http.requestToken; classe pública Oauthconstant {private static weibo weibo = null; Instância estática privada OAuthConstant = null; Solicitação de solicitação privada Solicitação; AccessToken AccessToken de acesso privado; token de string privado; String private Tokensecret; private OauthConstant () {}; public estático sincronizado oauthconstant getInstance () {if (instance == null) instância = new oauthconstant (); instância de retorno; } public weibo getweibo () {if (weibo == null) weibo = new weibo (); devolver Weibo; } public AccessToken getAccessToken () {return AccessToken; } public void setAccessToken (AccessToken AccessToken) {this.accessToken = AccessToken; this.token = accessToken.getToken (); this.Tokensecret = accessToken.getTokensecret (); } public requestToken getRequestToken () {return requestToken; } public void setRequestToken (requestToken requestToken) {this.RequestToken = requestToken; } public string getToken () {return token; } public void Settoken (string token) {this.token = token; } public string getTokensecret () {return Tokensecret; } public void STETKENSECRET (String tokensecret) {this.tokensecret = tokensecret; }}Em seguida é o programa principal mais crítico:
pacote com.pocketdigi.weibo; importar java.io.file; importação weibo4android.weibo; importar weibo4android.weiboException; importar weibo4android.http.accessToken; importar weibo4android.http.requestToken; importar Android.App.Activity; importar android.content.intent; importar Android.content.sharedPreferences; importar android.content.sharedPreferences.editor; importar android.net.uri; importar android.os.bundle; importar Android.View.View; importar Android.View.View.OnClickListener; importar Android.widget.button; importar Android.widget.edittext; importar Android.widget.toast; A classe pública principal estende a atividade { /** chamado quando a atividade é criada pela primeira vez. */ String key = "", secret = ""; Login do botão, envie; Status EdittExt; @Override public void onCreate (pacote savedInstancestate) {super.oCreate (savedInstancestate); setContentView (r.layout.main); System.setProperty ("weibo4j.oauth.consumerkey", "3997936609"); System.setProperty ("weibo4j.oauth.consumersecret", "8bc9e3bfd6e8e3b2b8bda9079918950"); // Defina a chave e o login secreto do aplicativo aplicado na plataforma aberta do aplicativo SINA = (botão) findViewById (r.id.login); send = (botão) findViewById (r.id.send); status = (EditText) findViewById (r.id.status); Login.setOnClickListener (new OnClickListener () {@Override public void OnClick (View V) {// TODO Método Auto-Gerado Stub Login (); // Login}}); send.setOnClickListener (new OnClickListener () {@Override public void OnClick (View V) {// TODO Method Auto-Generated Stub Login (); // Login}}}); send.setOnClickListener (new OnClickListener () {@Override public void OnClick (View V) {// TODO Método Auto-Gerado Stub String Text = String.ValueOf (status.getText ()); Weibo Weibo = new Weibo (); Somente arquivo de texto f = novo arquivo ("/sdcard/wallpaper/129567208597069400.jpg"); Catch (WeiboException e) {// TODO GENERATO AUTOMAGEM BLOCO E.PRINTSTACKTRACE (); } @Override Protected void OnStart () {// TODO Método Gerado Auto-Generado Stub Super.onstart (); // Verifique ao iniciar, verifique se ele vem da página da web para fazer login // se sim, obtenha a chave e segredo // Leia o sharedPreferences // Se você não conseguir obter chave e segredo, pule para fazer login diretamente Uri Uri = this.getIntent (). GetData (); if (uri! = null) {// se for um navegador, tente {requestToken requestToken = oauthconstant.getInstance () .getRequestToken (); AccessToken AccessToken = requestToken.getAccessToken (URI .getQueryParameter ("OAuth_Verifier")); Oauthconstant.getInstance (). SetAccessToken (AccessToken); // Salvar editor sharedata = getSharedPreferences ("weibo", 0) .edit (); sharedata.putString ("key", accessToken.getToken ()); sharedata.putString ("Secret", AccessToken.getTokensecret ()); sharedata.Commit (); key = accessToken.getToken (); secret = accessToken.getTokensecret (); } catch (weiBoException e) {e.printStackTrace (); }} else {// Se o usuário iniciar o SharedPreferences Settings = getSharedPreferences ("weibo", 0); key = Settings.getString ("key", ""); secret = Settings.getString ("Secret", ""); } if (key.equals ("") || secret.equals ("" ")) {Toast.MakeText (this," ainda não registrado ", Toast.Length_long) .Show (); Conecte-se(); // pule para o navegador login}} public void login () {weibo weibo = oauthconstant.getInstance (). Getweibo (); RequestToken requestToken; tente {requestToken = weibo.getoauthRequestToken ("sina: // weibo"); // Para evitar conflitos com aplicativos semelhantes, altere o URI por si mesmo URI URI2 = URI.PARSE (requestToken.getauthenticationurl ()+ "& de = xweibo"); Oauthconstant.getInstance (). SetRequestToken (requestToken); startActivity (nova intenção (Intent.action_view, URI2)); } catch (weiBoException e) {e.printStackTrace (); }}}Você precisa importar commons-httpclient-3.0.1.jar ao enviar imagens, caso contrário, será relatado um erro. Obviamente, o weibo4android-1.2.0.jar é indispensável.