微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 活动范围之外的onActivityResult

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

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

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

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

谢谢!

解决方法

这个设置会遇到很多问题,但这就是你想要开始的方式:

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

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();
    }
}

但是有几个问题.就像你的POJO的方法不能从主(UI)线程调用,因为你需要将异步调用(startActivityForResult())转换为同步调用(Pojo.m())和要从中接收信息的活动将在主线程上启动,因此您无法在Pojo.m()中阻止它…

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

原文地址:https://www.jb51.cc/android/318225.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐