在广播接收器中启动带有返回值的Activity?

3

我已经成功地从我的onReceive()方法中启动了一个Activity,但我真的需要做一个startActivityForResult();

有没有办法可以做到这一点?

顺便说一句,我如何使我的应用程序成为一个“相机”应用程序,即当应用程序启动拍照意图时,它会出现?

2个回答

4
重要的是要了解广播接收器的一点,那就是你不应该在其中添加长时间运行的进程,因为在大约5秒后,你的应用程序将崩溃。
在你的情况下最好的做法是从你的广播接收器中打开其他活动,并从该活动使用startActivityForResult()获取图片并从那里继续...

但是我该如何将图像 URI 返回给请求它的应用程序呢?这就是我要做的事情,直到我意识到我需要传递数据回来。 - Liam W
为什么需要使用这个广播接收器? 你的广播过滤器是什么? 你想要构建一个可以代替相机运行的应用程序吗? - 15412s
是的,也不是。我想要构建一个应用程序,它将运行得就像相机应用一样,但实际上允许用户从他们的图库中选择一个应用程序,而不是拍摄新照片。 - Liam W
您想创建一个应用程序,允许用户从已经拍摄的照片中选择一张。这个理解正确吗? - Praful Bhatnagar
这里是否有比串联活动更优雅的解决方案?我认为我不想为了启动另一个活动而创建一个仅用于此目的的活动。 - Tyler Pfaff

2

startActivityForResult只能从Activity中调用,因为它是在Activity类中定义的并且需要活动实例。

你只能从广播接收器中调用startActivity(),因为在onReceive()中,你只能访问通用的context对象,并且该类中没有定义startActivityForResult方法。


2
我发现了这个问题,那么当我从接收器调用一个活动时,如何获取一些数据返回呢? - Liam W
1
请问你能解释一下你的用例吗?广播接收器并不是用来这样使用的。根据官方的Java文档:BroadcastReceiver对象仅在调用onReceive(Context, Intent)期间有效。一旦您的代码从此函数返回,系统会认为该对象已完成且不再处于活动状态。 - Praful Bhatnagar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接