【问题标题】:onActivityResult with BroadcastReceiveronActivityResult 与 BroadcastReceiver
【发布时间】:2013-08-18 08:53:21
【问题描述】:

所以在我的主要Activity 中,使用Intent,我启动了一些Service 对象,它响应一些系统事件(当然在后台运行)并向注册的BroadcastReceiver 发送适当的消息在主要活动中。我尝试做的是startActivityForResult 在广播接收器的onReceive 方法中。我有兴趣在onReceive 中启动的活动是其他一些应用程序,它处理我的数据(由服务发送到广播接收器)并返回成功/失败消息。

问题是,应该获得成功/失败消息的onActivityResult 仅在我打开主要活动时运行。我想要做的是独立于我的主要活动是在顶部还是在后台运行(而不是在堆栈顶部)来获得结果。换句话说,我希望onActivityResult 在后台执行。

这就是想法(我省略了可以正常工作的不必要的部分和变量):

public class MainActivity extends Activity {

    ...

    public BroadcastReceiver br = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(something)) {
                String text = intent.getStringExtra(some_key);

                Intent anotherApp = new Intent(some_configuration);

                startActivityForResult(anotherApp, request_code);
            }
        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        // something should happen here

        // however this method fires only when MainActivity is on top
    }
}

【问题讨论】:

  • 欢迎来到 Stack Overflow!您可以在这里发布您已经拥有的代码的相关部分吗?
  • @PetrR。 - 谢谢。我添加了一个带有这个想法的 sn-p。

标签: android android-activity broadcastreceiver


【解决方案1】:

我尝试做的是在广播接收器的onReceive方法中启动ActivityForResult。

除非用户单击了某项以使该活动出现,否则不要显示该活动。不要在没有事先警告的情况下打断用户正在做的任何其他事情。

我想要做的是独立于我的主要活动是在顶部还是在后台运行(而不是在堆栈顶部)获得结果。换句话说,我希望 onActivityResult 在后台执行。

不支持,抱歉。

【讨论】:

  • 我不想打扰用户。我只需要将数据传递给后台的某个应用程序,它就可以正常发送,但是我想使用 onActivityResult 接收的消息(也在后台)需要我的主要活动位于顶部。我的问题的全部目的不是打断用户并强迫他参加我的活动。这才是重点。我只想在后台接收结果并显示通知。
  • @user2693529:“我不是想打断用户”——你自己承认,当你不在前景。这会打断用户,因为 第三方应用 将显示一个活动。 “我只想在后台接收结果并显示通知”——然后停止依赖此第三方活动,并想出其他方法来获得您的结果。
  • 我的整个应用程序是对第三部分活动的扩展。我必须与之互动,一切都完美无缺,除了一个例外——成功/失败的信息。我可以在onReceive 方法中显示通知并执行我需要的任何操作,但在用户打开我的活动之前我无法知道返回消息。我认为,没有这样的功能是很糟糕的。再说一遍,它与扰乱用户无关。
  • @user2693529:“我认为,没有这样的功能很糟糕”——然后与第三方开发人员联系,要求他们为您提供startActivityForResult() 的替代方案做这项工作(例如,服务)。
  • 好的,所以后台处理是不可能的。有没有办法在onReceive 方法中自动将此活动置于最前面?我尝试设置FLAG_ACTIVITY_NEW_TASK 并将startActivityForResult 更改为startActivity,但我仍然必须手动打开活动。现在这让人分心,但我为自己构建了这个应用程序,我希望该活动立即弹出而没有任何通知。换句话说,有没有办法在onReceive 方法中弹出任何活动(无论是否外部)?提前致谢。
猜你喜欢
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多