android - Twitter 应用在​​ onActivityResult 中返回错误值

标签 android twitter twitter-fabric

我正在编写一条推文,然后启动 Twitter 应用程序以像这样发布推文:

intent = new TweetComposer.Builder(getFragmentActivity())
                        .text(viewHolder.etShareText.getText().toString())
                        .url(contentUrl)
                        .image(imageUri)
                        .createIntent();

它工作了很长时间,现在仍然有效,我可以在我的个人资料中发布一条推文,但前一段时间,我的 onActivityResult 中的每个操作都以 RESULT_CANCELED 结果() 方法尽管实际结果是成功的。 也许 Twitter API 发生了一些变化?现在如何处理结果?

最佳答案

实际上,在这种情况下,onActivityResult() 的用法可能不正确。要捕获组合结果,例如 vijikumar说,我们应该使用BroadcastReceiver。但是这些信息对我们来说还不够。因为在很多情况下,twitter 的撰写方式是相互混淆的。喜欢documentation说 ;有两种撰写推文的方法:

  • 启动 Twitter 应用程序的 Tweet Composer
  • 启动 Twitter Kit Native Composer

如果您更喜欢使用第一种方式,据我所知,没有一种健康的方法可以使用 BroadcastReceiver、onActivityResult 等来捕获合成结果。

BroadcastReceiver 方法无法使用第一种方式。但是,如果您更喜欢使用第二种方式,则可以在健康的位置使用 BroadcastReceiver 捕获合成结果。你不应该认为第一种方式不重要。我将简要谈谈第一种方式。

做上面这些;

第二种方式

在您的应用级 gradle 文件中添加以下存储库和依赖项

repositories {
        jcenter()
}

compile 'com.twitter.sdk.android:twitter-core:3.1.1'
compile 'com.twitter.sdk.android:tweet-composer:3.1.1'

然后在BroadcastReceiver下面添加

public class MyResultReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    if (TweetUploadService.UPLOAD_SUCCESS.equals(intent.getAction())) {
      // success
    } else if (TweetUploadService.UPLOAD_FAILURE.equals(intent.getAction())) {
      // failure
    } else if (TweetUploadService.TWEET_COMPOSE_CANCEL.equals(intent.getAction())) {
      // cancel
    }
  }
}

然后将您的 BroadcastReceiver 添加到应用程序 list 文件中,如下所示

<receiver
  android:name=".MyResultReceiver"
  android:exported="false">
  <intent-filter>
    <action android:name="com.twitter.sdk.android.tweetcomposer.UPLOAD_SUCCESS"/>
    <action android:name="com.twitter.sdk.android.tweetcomposer.UPLOAD_FAILURE"/>
    <action android:name="com.twitter.sdk.android.tweetcomposer.TWEET_COMPOSE_CANCEL"/>
  </intent-filter>
</receiver>

最后,要打开 Composer 屏幕,请使用以下代码块启动 ComposerActivity

final TwitterSession session = TwitterCore.getInstance().getSessionManager()
    .getActiveSession();
final Intent intent = new ComposerActivity.Builder(YourActivity.this)
    .session(session)
    .text("Love where you work")
    .hashtags("#twitter")
    .createIntent();
startActivity(intent);

当您使用这种方式时,您将在 BroadcastReceiver 中捕获 composer 结果。

我不会分享任何关于First Way 的代码块。但是为什么我们需要第一种方式呢?其实第一种方式包含的内容很丰富,但是只要我看到,它不支持捕获结果。所以第二种方式在很多情况下对我们来说已经足够了。 但是,如果 Twitter 应用程序不存在该设备,则第二种方式会因为 session 而崩溃。在这种情况下,我们应该使用第一种方式在互联网浏览器中打开 Composer 屏幕。所以我们应该同时使用这两种方法,但就像您看到的那样,第一种比第二种更有效。

注意:请不要忘记添加 twitter 套件初始化配置和身份验证机制。

关于android - Twitter 应用在​​ onActivityResult 中返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44267798/

相关文章:

javascript - 精简了一系列javascript函数

android - 如何在android上等待异步方法

ios - 没有来自 TestFlight Beta 版本和 AppStore 的 Crashlytics 日志

java - 地理位置谷歌地图 v2

android - ScrollView 中 postDelayed 方法的替代方法

java - 热图仅按值加权,而不按浓度加权

css - Twitter Typeahead Bootstrap 冲突

ios - HTTPBody - Swift POST 请求 - 推特

ios - TWTRTweetView 未加载个人资料图片

java - 如何共享内部存储中的 mp3 文件?