代码之家  ›  专栏  ›  技术社区  ›  Donal Rafferty

Android-sendOrderedBroadcast帮助

  •  8
  • Donal Rafferty  · 技术社区  · 14 年前

    sendOrderedBroadcast 在我的Android应用程序中。

    我希望能够将意图从一个应用程序发送到另一个应用程序,然后从接收意图的应用程序获取数据,在本例中为布尔值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*参数(第3个参数)

    我做了一个快速谷歌,没有拿出任何例子,任何帮助或例子非常感谢。

    更新代码:


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

    有人知道为什么吗?

    1 回复  |  直到 14 年前
        1
  •  15
  •   Tim Kryger    14 年前

    你需要 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