gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:10:32 24 4
gpt4 key购买 nike

目前我正在尝试实现可重复使用的 Twitter 状态“海报”。它的 Twitter 状态部分有效,但可重用部分无效。这是我正在做的:

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

TweetStatus 向另一个 Activity OAUTH 发送一个 Intent ,它将返回用户 token 和 secret ,允许我们“登录”到 Twitter。

如果 OAUTH 找不到任何保存的 token 和 secret ,它会向浏览器发送一个 Intent ,以便用户可以登录 Twitter 并确认我们的应用程序被允许代表他们发送推文。 Twitter 然后使用回调返回 OAUTH 应用程序(通过在 list 中使用 Intent 过滤器,我们制作自己的 android:scheme 和主机):

<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="my-app" android:host="twitter-login-success" />
</intent-filter>

回调 URI 是:

private static final Uri CALLBACK_URI = Uri.parse("my-app://twitter-login-success");

正是因为这个回调是 OAUTH 类必须扩展 Activity 的 Intent (因此它可以接收这些 Intent )。

所以问题出在 OAUTH 返回 token 和 secret (上面以粗体显示)。当前,OAUTH 将 Intent 发送到 SummaryDisplay,然后将数据发送到 TweetStatus。问题是 SummaryDisplay Intent 是硬编码的:

Intent i = new Intent(this, SummaryDisplay.class);

因此 OAUTH 类不再可重用,因为需要为每个想要发送 Twitter 状态的 Activity 创建一个新类。

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

所以:

TweetStatus 使用 StartActivityForResult 调用 OAUTH,

OAUTH调用浏览器,

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

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

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

09-08 10:22:00.742: WARN/ActivityManager(563): Activity is launching as a new task, so cancelling activity result.

还有其他方法吗?例如,有没有一种方法可以在 Intent 中发送你自己的“类”,然后可以在

Intent i = new Intent(this, myClassVariableSetUsingAnIntent);

这样我就可以使用

android:launchMode="singleInstance"

感谢您的帮助。

最佳答案

Is there, for example, a way of sending a "class" of yourself in an intent...

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

关于用于可重用代码的 Android StartActivityForResult - 还有其他方法吗? (关于推特),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3666291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com