android – 活动范围之外的onActivityResult

前端之家收集整理的这篇文章主要介绍了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()中阻止它…

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

猜你在找的Android相关文章