我正在编写推文然后启动推特应用程序来推文:
intent = new TweetComposer.Builder(getFragmentActivity())
.text(viewHolder.etShareText.getText().toString())
.url(contentUrl)
.image(imageUri)
.createIntent();
它工作了很长时间,它仍然有效,我能够在我的个人资料上发布推文,但前段时间我的结果 RESULT_CANCELED > onActivityResult()方法尽管实际结果是成功的。 也许在Twitter API中有些变化?现在如何处理结果?
答案 0 :(得分:1)
实际上,在这种情况下onActivityResult()的使用可能不是真正的方法。为了捕捉作曲结果,如vijikumar所说,我们应该使用BroadcastReceiver。但这些信息对我们来说还不够。因为在很多情况下,Twitter构成方式彼此混淆。就像documentation所说的那样;有两种方法可以撰写推文:
如果您更喜欢使用第一种方式,只要我看到,使用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添加到应用程序清单文件中,如下所示
<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>
最后,要打开作曲家屏幕,请使用以下代码块启动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中捕获作曲家结果。
我不会分享任何关于 First Way 的代码块。但为什么我们需要第一种方式呢?实际上第一种方式包含非常丰富的内容,但只要我看到,它不支持捕获结果。因此,在许多情况下,第二种方式对我们来说足够 然而,如果Twitter应用程序不存在该设备,第二种方式将因会话而崩溃。 在这种情况下,我们应该使用第一种方式在互联网浏览器中打开作曲家屏幕。因此,我们应该使用两种方式,但就像你看到第一种方法比第二方更有效。
注意:请不要忘记添加twitter工具包初始化配置和认证机制。
答案 1 :(得分:0)
使用BroadcastReceiver。
public class MyResultReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (TweetUploadService.UPLOAD_SUCCESS.equals(intent.getAction())) {
// success
final Long tweetId = intentExtras.getLong(TweetUploadService.EXTRA_TWEET_ID);
} else {
// failure
final Intent retryIntent = intentExtras.getParcelable(TweetUploadService.EXTRA_RETRY_INTENT);
}
}
}
在清单
中<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"/>
</intent-filter>
</receiver>