【问题标题】:Android - sendOrderedBroadcast helpAndroid - sendOrderedBroadcast 帮助
【发布时间】:2010-05-31 12:06:13
【问题描述】:

我正在尝试在我的 Android 应用中使用 sendOrderedBroadcast

我希望能够将 Intent 从我的一个应用程序发送到另一个应用程序,然后我想从接收 Intent 的应用程序中获取数据,在本例中为布尔值 true 或 false。

这是当前代码:

    Intent i = new Intent();
    i.setAction(GlobalData.PROPOSE_IN_DOMAIN_ROAM_INTENT);
    i.putExtra("com.testnetworks.QCLEVEL", aProposedTheoreticalQoSLevel);
    sendOrderedBroadcast(i, null, null, null, Activity.RESULT_OK, null, null);

这是实现我想要的正确方法吗?

如果是这样,我应该使用什么作为 resultReceiver* 参数? (第三个参数)

然后我如何从广播接收数据?

我做了一个快速的 google 并没有提出任何示例,非常感谢任何帮助或示例。

更新代码:


sendOrderedBroadcast(i, null, domainBroadcast, null, Activity.RESULT_OK, null, null);

class DomainBroadcast extends BroadcastReceiver{

    @Override
    public void onReceive(Context arg0, Intent intent) {
        String action = intent.getAction();

        if(GlobalData.PROPOSE_IN_DOMAIN_ROAM_INTENT.equals(action)){
            Log.d("BROADCAST", "Returning broadcast");

            Bundle b = intent.getExtras(); 
            Log.d("BROADCAST", "Returning broadcast " + 
                    b.getInt("com.testnetworks.INT_TEST"));
        }      
    }

    @Override
    public void onReceive(Context context, Intent intent) {
            String action = intent.getAction(); 

            if(GlobalData.PROPOSE_IN_DOMAIN_ROAM_INTENT.equals(action)){

                Bundle b = intent.getExtras();
                int testQCLevel = b.getInt("com.testnetworks.QCLEVEL");
                switch(testQCLevel){
                case 1:
                    Log.d("QCLevel ", "QCLevel = UNAVAILABLE");
                    break;
                case 2:
                    Log.d("QCLevel ", "QCLevel = BELOWUSABILITY");
                    break;
                case 3:
                    Log.d("QCLevel ", "QCLevel = VOICE");
                    break;
                }

                intent.putExtra("com.testnetworks.INT_TEST", 100);

          }

所以根据文档,我应该在我的 DomainBroadcast 接收器中收到 100,但它总是返回为 0。

谁能明白为什么?

**resultReceiver - 你自己的 BroadcastReceiver 作为广播的最终接收者。*

【问题讨论】:

  • 上面有两个onReceive() 方法。

标签: android android-intent broadcast broadcastreceiver


【解决方案1】:

您需要get the extra data results Bundle 并将您的数据添加到其中。

试试这样的:

public class DemoOrderedBroadcast extends Activity {
    private static String SOMETHING_HAPPENED = "com.example.somethinghappened";
    private static String EXTRA_INTEGER = "extra integer";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        IntentFilter filter = new IntentFilter(SOMETHING_HAPPENED);

        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Bundle results = getResultExtras(true);
                results.putInt(EXTRA_INTEGER, 100);
                Log.d("DemoOrderedBroadcast",
                        "In Initial Receiver: Put 'extra integer' = 100");
            }
        }, filter);

        Intent intent = new Intent(SOMETHING_HAPPENED);
        sendOrderedBroadcast(intent, null, new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Bundle results = getResultExtras(true);
                Log.d("DemoOrderedBroadcast",
                        "In Result Receiver: Got 'extra integer' = "
                                + results.getInt(EXTRA_INTEGER, -1));
            }
        }, null, Activity.RESULT_OK, null, null);
    }
}

产生所需的输出:

$ adb -e shell am start -n com.example.DemoOrderedBroadcast/.DemoOrderedBroadcast
Starting: Intent { cmp=com.example.DemoOrderedBroadcast/.DemoOrderedBroadcast }
$ adb -e shell logcat | grep D/DemoOrderedBroadcast
D/DemoOrderedBroadcast( 1343): In Initial Receiver: Put 'extra integer' = 100
D/DemoOrderedBroadcast( 1343): In Result Receiver: Got 'extra integer' = 100

【讨论】:

  • 如果您有两个广播接收器,这将如何工作。在我运行的一个示例中,传入的接收器只被触发一次。
猜你喜欢
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 2011-03-26
  • 1970-01-01
  • 2011-08-15
  • 2011-08-07
相关资源
最近更新 更多