结果回到从广播接收器(Result Back from Broadcast Receiver)

2019-10-18 15:16发布

我从一个应用程序发送一个广播应用B,应用B具有BroadCastReceiver处理的意图。

现在我做了一些操作onReceive在应用B的BroadcastReceiver ,然后我想结果返回给应用程序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
    }
}  

内部应用程序答:

Intent intent = new Intent("a_specified_action_string");
sendBroadcast(intent);  

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

Answer 1:

不只是(在某种程度上)为什么要派一个IntentTripBackupReceiver由应用程序A接收?

就像是:

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

您可以收到此IntentBroadcastReceiver定义了应用程序A.或可选择地使用Context.startActivity(Intent)方法来启动应用程序中的A.活动

您可能需要实现onNewIntent()如果这使得对已经运行的一种呼吁。


请使用签署意向为此,为了防止用户侵入你的意图API。



Answer 2:

我一直在寻找类似的东西。 这帮助了我极大。

基本上,代替sendBroadcast(意向)尝试使用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);  


文章来源: Result Back from Broadcast Receiver