安卓上如何在 Twitter 分享

14

我该如何在Twitter上分享一个字符串信息?我想让用户从多个字符串信息中进行选择,并单击其中一个来通过Twitter共享它。


可能是 http://stackoverflow.com/questions/14564805/how-can-i-get-a-tweet-for-a-specific-url/14565661#14565661 的重复问题。 - TN888
请检查此链接,我使用SDK完成了这个问题:https://stackoverflow.com/a/57308618/6667442 - Ketan Ramani
5个回答

20

有许多方法可以实现这个功能。其中一种方法是打开http://twitter.com,并在一个意图中分享推文,例如...

Intent tweet = new Intent(Intent.ACTION_VIEW);
tweet.setData(Uri.parse("http://twitter.com/?status=" + Uri.encode(message)));//where message is your string message
startActivity(tweet);

或者,

Intent tweet = new Intent(Intent.ACTION_SEND);
tweet.putExtra(Intent.EXTRA_TEXT, "Sample test for Twitter.");
startActivity(Intent.createChooser(share, "Share this via"));

或者,

String tweetUrl = "https://twitter.com/intent/tweet?text=WRITE YOUR MESSAGE HERE &url="
                    + "https://www.google.com";
Uri uri = Uri.parse(tweetUrl);
startActivity(new Intent(Intent.ACTION_VIEW, uri));

6
为了通过 Twitter 分享,我使用自己编写的 Util 类中的静态函数,代码如下:
public class Util
{
    public static Intent getTwitterIntent(Context ctx, String shareText)
    {
        Intent shareIntent;

        if(doesPackageExist(ctx, "com.twitter.android"))
        {           
            shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setClassName("com.twitter.android",
                "com.twitter.android.PostActivity"); 
            shareIntent.setType("text/*");
            shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareText); 
            return shareIntent;
       }
       else
       {
           String tweetUrl = "https://twitter.com/intent/tweet?text=" + shareText;
           Uri uri = Uri.parse(tweetUrl);
           shareIntent = new Intent(Intent.ACTION_VIEW, uri);
           return shareIntent;
       }
   }
}

这个函数的优点是,如果已安装 Twitter 应用程序,则使用该应用程序;否则,使用基于 Web 的 Twitter 页面。将要发布的文本传递给函数。
在您的场景中,当用户从消息选择中选择后,请将所选消息传递到该函数中。然后,它将返回一个 Intent,您可以将其插入 startActivity() 函数中,如下所示:
startActivity(Util.getTwitterIntent(context, "Text that will be tweeted"));

但是当它打开浏览器时,它不会返回到您的应用程序。 - Rajiv yadav
有没有办法使用这种方法发送图像和文本? - Luis Pereira
有没有办法知道共享是否成功? - Sarith Nob

1
如果您需要一个成功的响应和推文ID,您可以使用Twitter SDK状态服务来在Twitter上发布推文。您可以使用以下内容发布文本。
   StatusesService statusesService = TwitterCore.getInstance().getApiClient().getStatusesService();
    Call<Tweet> tweetCall = statusesService.update(text, null, false, null, null, null, false, false, null);
    tweetCall.enqueue(new Callback<Tweet>() {
        @Override
        public void success(Result<Tweet> result) {
            Log.d("result", result.data.idStr);
        }



        @Override
        public void failure(TwitterException exception) {
            hideProgressDialogResult();
            exception.printStackTrace();

        }
    });

您也可以上传带有描述的图片,但在此之前,您需要使用Twitter媒体服务创建图像的媒体ID,并将此媒体ID传递给状态服务。


1
你可以使用库Twitter4J。下载并添加到Java构建路径中。 代码示例:
  • 添加新推文:

    Twitter twitter = TwitterFactory.getSingleton();

    Status status = twitter.updateStatus(latestStatus);

  • 使用OAuth登录(Java代码,编辑):

    Twitter twitter = TwitterFactory.getSingleton();
    twitter.setOAuthConsumer("[consumer key]", "[consumer secret]");
    RequestToken requestToken = twitter.getOAuthRequestToken();
    AccessToken accessToken = null;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    while (null == accessToken) {
      System.out.println("打开以下网址并授权访问您的账户:");
      System.out.println(requestToken.getAuthorizationURL());
      System.out.print("输入PIN码(如果有)或直接按回车键。[PIN]:");
      String pin = br.readLine();
      try{
         if(pin.length() > 0){
           accessToken = twitter.getOAuthAccessToken(requestToken, pin);
         }else{
           accessToken = twitter.getOAuthAccessToken();
         }
      } catch (TwitterException te) {
        if(401 == te.getStatusCode()){
          System.out.println("无法获取访问令牌。");
        }else{
          te.printStackTrace();
        }
      }
    }
    //将accessToken持久化以备后用。
    storeAccessToken(twitter.verifyCredentials().getId() , accessToken);
    Status status = twitter.updateStatus(args[0]);
    System.out.println("成功更新状态为 [" + status.getText() + "]。");
    System.exit(0);
    

    }

    private static void storeAccessToken(int useId, AccessToken accessToken){ //存储accessToken.getToken() //存储accessToken.getTokenSecret() }

    • 获取推文:

      Twitter twitter = TwitterFactory.getSingleton();
      Query query = new Query("source:twitter4j yusukey");
      QueryResult result = twitter.search(query);
      for (Status status : result.getStatuses()) {
          System.out.println("@" + status.getUser().getScreenName() + ":" + status.getText());
      }
      
  • 获取时间线:

       Twitter twitter = TwitterFactory.getSingleton();
       List<Status> statuses = twitter.getHomeTimeline();
      System.out.println("显示主页时间线。");
       for (Status status : statuses) {
          System.out.println(status.getUser().getName() + ":" +
                           status.getText());
    }
    

我希望我有所帮助


0
try {
    Intent tweetIntent = new Intent(Intent.ACTION_SEND);
    tweetIntent.setPackage("com.twitter.android");
    tweetIntent.setType("text/plain");
    tweetIntent.putExtra(Intent.EXTRA_TEXT, "your message");
    startActivity(tweetIntent);
  } catch (ActivityNotFoundException e) {
    Intent tweetIntent = new Intent(Intent.ACTION_VIEW);
    tweetIntent.setData(Uri.parse("https://twitter.com/intent/tweet?text=" + "your message"));
    startActivity(tweetIntent);
  }

1
你的答案目前写得不够清晰。请进行[编辑]以添加更多细节,以帮助其他人理解这如何回答问题。您可以在帮助中心找到有关编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接