结果从广播接收器返回

时间:2013-09-18 08:44:45

标签: android android-intent broadcastreceiver

我正在从应用A向app B发送broadCast,应用B有BroadCastReceiver来处理意图。

现在我在App B onReceive的{​​{1}}中进行一些操作,然后我想将结果返回到App A,这样我就可以进行回调,并在结果为正时继续操作。

下面是一些代码。

在App B中:

BroadcastReceiver

在App A中:

public class TripBackupReceiver extends BroadcastReceiver {
@Override
    public void onReceive(Context arg0, Intent arg1) {
        System.out.println("broadcast Received");

        // send result back to Caller Activity
    }
}  

任何人都可以解决这个问题,请指导我一些建议。谢谢!

2 个答案:

答案 0 :(得分:1)

为什么不只是(某种程度上)从App A收到的Intent发送TripBackupReceiver

类似的东西:

public class TripBackupReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("broadcast Received");

        // send result back to Caller Activity
        Intent replyIntent = new Intent("a_specified_action_string");
        context.sendBroadcast(replyIntent);         
    }
}

您可以在应用A的Intent定义中收到此BroadcastReceiver。或者使用Context.startActivity(Intent)方法在应用A中启动活动。

如果调用已经在运行的活动,则可能需要实施onNewIntent()


请为此使用已签名的意图,以防止用户入侵您的Intent API。

答案 1 :(得分:0)

我正在寻找类似的东西。 This给了我很大的帮助。

基本上,不是sendBroadcast(Intent)而是尝试使用合适形式的sendOrderedBroadcast(),它允许设置BroadcastReceiver来处理接收器的结果。一个简单的例子:

sendOrderedBroadcast(intent, null, new BroadcastReceiver() {
        @SuppressLint("NewApi")
        @Override
        public void onReceive(Context context, Intent intent) {
            Bundle results = getResultExtras(true);

            String trail = results.getString("breadcrumb");
            results.putString("breadcrumb", trail + "->" + "sometext");
            Log.i(TAG, "Final Result Receiver = " + results.getString("breadcrumb", "nil"));
        }
    }, null, Activity.RESULT_OK, null, null);