gpt4 book ai didi

android - onActivityResult 在 Activity 范围之外

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:00:49 24 4
gpt4 key购买 nike

我正在尝试创建一个包含将被其他人使用的共享代码的 android 项目。在这个项目中,我只有 POJO 而没有 android 特定类。

一些功能需要调用一些 Activity 并且取决于结果。我的 POJO 类在使用时会引用调用 Activity ,但这是在运行时发生的,我无法控制这些 Activity 的实现。

我的问题是,通过引用调用 Activity ,我可以startActivityForResult,但我无法添加 onActivityResult,它可能存在于调用 Activity 中,但不知道我使用的 requestCode。

我的问题是我如何从常规 Java 对象中知道 Activity 何时返回?因为,据我所知,我只能在 Activity 类上实现 onActivityResult

谢谢!

最佳答案

此设置会遇到很多问题,但这就是您可能希望开始的方式:

您必须在您的项目中包含一个 Activity ,该 Activity 除了启动您想要从中获取结果的 Activity 并将其存储在全局可访问的存储(例如,单例或静态字段)中之外什么都不做。

class Pojo {
static final ConditionVariable gate = new ConditionVariable();
static int result;

int m(Context context) {
context.startActivity(new Intent(context, ForwarderActivity.class));
gate.block();
return result;
}
}

class ForwarderActivity extends Activity {
private boolean started = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!started) {
started = true;
startActivityForResult(new Intent("ContactsProvider"), 1);
}
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Pojo.result = resultCode;
Pojo.gate.open();
}
}

不过,有几个问题。就像不能从主 (UI) 线程调用 POJO 的方法一样,因为您需要将异步调用 (startActivityForResult()) 转换为同步调用 (Pojo.m()) 以及您希望从中接收信息的 Activity 将在主线程上启动,因此您不能在 Pojo.m() 中阻止它...

无论如何,该代码不起作用,但如果您真的必须坚持使用此设置,您可以看到该走哪条路。但是你真的应该尝试想出一些其他的方法来获取数据,比如内容提供者。

关于android - onActivityResult 在 Activity 范围之外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7649818/

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