Android StartActivityForResult可重用代码-还有其他方法吗?(关于Twitter)

Android StartActivityForResult可重用代码-还有其他方法吗?(关于Twitter),android,twitter,oauth,Android,Twitter,Oauth,目前,我正在尝试实现一个可重用的Twitter状态“海报”。它的Twitter状态部分正在工作,但可重用部分没有。以下是我正在做的: 名为SummaryDisplay的活动导入类TweetStatus并调用函数sendStatus。它还实现了一个侦听器,当TweetStatus可以确认状态已成功发送时调用该侦听器。到目前为止还不错 TweetStatus将意向发送到另一个活动OAUTH,,该活动将返回用户令牌和密码,允许我们“登录”Twitter 如果OAUTH找不到任何保存的令牌和机密,它会向

目前,我正在尝试实现一个可重用的Twitter状态“海报”。它的Twitter状态部分正在工作,但可重用部分没有。以下是我正在做的:

名为SummaryDisplay的活动导入类TweetStatus并调用函数sendStatus。它还实现了一个侦听器,当TweetStatus可以确认状态已成功发送时调用该侦听器。到目前为止还不错

TweetStatus将意向发送到另一个活动OAUTH,,该活动将返回用户令牌和密码,允许我们“登录”Twitter

如果OAUTH找不到任何保存的令牌和机密,它会向浏览器发送一个意图,这样用户就可以登录Twitter并确认我们的应用程序被允许代表他们发送推文。Twitter然后使用回调返回OAUTH应用程序(通过在清单中使用意图过滤器,我们创建了自己的android:scheme和host):

正是因为此回调是OAUTH类必须扩展活动的意图(因此它可以接收这些意图)

因此,问题在于OAUTH返回令牌和密码(上面用粗体显示)。目前OAUTH向SummaryDisplay发送一个意图,然后将数据发送到TweetStatus。问题在于SummaryDisplay意图是硬编码的:

Intent i = new Intent(this, SummaryDisplay.class);
因此OAUTH类不再是可重用的,因为需要为每个想要发送Twitter状态的活动创建一个新的类

一个选项是将来自Twitter的回调更改为SummaryDisplay而不是OAUTH,但这需要将回调更改为您选择的一个(一个未在Twitter注册,我需要检查是否允许)。我正在尝试的另一个选项是使用StartActivityForResult

因此:

TweetStatus使用StartActivityForResult调用OAUTH

OAUTH调用浏览器

浏览器然后使用回调URI回调OAUTH

OAUTH将结果返回给启动它的人

因此可重复使用。然而,从浏览器接收到的回调URI似乎正在创建一个新的OAUTH实例,它不知道回调谁,所以什么也不做。我尝试将android:launchMode设置为singleInstance,但这会禁用发送结果(使用LogCat报告):

还有其他的方法吗?例如,有没有一种方法可以发送一个“类”你自己的意图,然后可以用于

Intent i = new Intent(this, myClassVariableSetUsingAnIntent);
这样我就可以使用

android:launchMode="singleInstance"
谢谢你的帮助

例如,有没有一种方法可以让你自己的“阶级”产生一种意图

您可以使用
createPendingResult()
Intent
额外方式传递对象,该对象可在以后用于触发onActivityResult()。或者,您可以进行私人“广播”,指定操作和包,以限制范围仅返回到原始应用程序。这是一个示例,演示了这两种代码的使用——在您的情况下,您当然不会从服务中使用它们,但这是我手头唯一的示例代码。原则上,其中之一应该让您将数据返回到原始活动。从这里开始,这是一个
finish()
-在您所在的位置和该活动之间定义所有内容的问题

例如,有没有一种方法可以让你自己的“阶级”产生一种意图


您可以使用
createPendingResult()
Intent
额外方式传递对象,该对象可在以后用于触发onActivityResult()。或者,您可以进行私人“广播”,指定操作和包,以限制范围仅返回到原始应用程序。这是一个示例,演示了这两种代码的使用——在您的情况下,您当然不会从服务中使用它们,但这是我手头唯一的示例代码。原则上,其中之一应该让您将数据返回到原始活动。从这里开始,就需要
finish()。此处的详细信息:

可能的替代方法是通过为意图设置标志来重用活动。此处的详细信息:

感谢您的帮助……甚至从未有过新的createPendingResult()。将对此进行一次尝试,并在时间允许的情况下查看它的运行情况。感谢您的帮助…甚至从未出现过新的CreatePendingreult()。我会尝试一下,看看时间允许的情况。
09-08 10:22:00.742: WARN/ActivityManager(563): Activity is launching as a new task, so cancelling activity result.
Intent i = new Intent(this, myClassVariableSetUsingAnIntent);
android:launchMode="singleInstance"