隨筆-348  評(píng)論-598  文章-0  trackbacks-0

          程序A的Receiver:

          receiver = new BroadcastReceiver() {

                      @Override
                      
          public void onReceive(Context ctx, Intent intent) {
                          Log.i(
          "TestActivity""===============Broadcast Received:" + intent.getAction());
                          
          if (intent.getAction().equals(RESPONSE_ACTION)) {
                              Uri uri 
          = intent.getData();
                              String location 
          = "";
                              
          if (uri != null{
                                  Log.i(
          "TestActivity",
                                          
          "=======================parameter location:"
                                                  
          + uri.getQueryParameter("location"));
                                  Log.i(
          "TestActivity""======================= host:"
                                          
          + uri.getHost());
                                  Log.i(
          "TestActivity""======================= path:"
                                          
          + uri.getPath());
                                  location 
          = uri.getQueryParameter("location");
                                  FileInputStream fis 
          = null;
                                  ByteArrayOutputStream bos 
          = null;
                                  File file 
          = new File(location);
                                  
          try {
                                      fis 
          = new FileInputStream(file);
                                      bos 
          = new ByteArrayOutputStream();
                                      
          byte[] data = new byte[512];
                                      
          int count = -1;
                                      
          while ((count = fis.read(data)) != -1{
                                          bos.write(data, 
          0, count);
                                      }

                                      String xml 
          = new String(bos.toByteArray());
                                      Log.i(
          "TestActivity""xml1=" + xml);
                                      Toast.makeText(TestActivity.
          this, xml, Toast.LENGTH_SHORT).show();
                                  }
           catch (Exception ex) {
                                      ex.printStackTrace();
                                  }
           finally {
                                      
          if (fis != null)
                                          
          try {
                                              fis.close();
                                          }
           catch (IOException e) {
                                              
          // TODO Auto-generated catch block
                                              e.printStackTrace();
                                          }

                                      
          if (bos != null)
                                          
          try {
                                              bos.close();
                                          }
           catch (IOException e) {
                                              
          // TODO Auto-generated catch block
                                              e.printStackTrace();
                                          }

                                  }

                              }

                          }

                      }


                  }
          ;
                  IntentFilter filter 
          = new IntentFilter();
                  filter.addAction(RESPONSE_ACTION);
                  filter.addCategory(Intent.CATEGORY_DEFAULT);
                  filter.addDataScheme(
          "http");
                  registerReceiver(receiver, filter);
          程序A的發(fā)送BC:
                  btn.setOnClickListener(new OnClickListener() {

                      @Override
                      
          public void onClick(View arg0) {
                          
          // TODO Auto-generated method stub
                          Uri uri = Uri.parse("http://www.xx.com/getDetails?id=123");
                          Intent in 
          = new Intent();
                          in.setAction(REQUEST_ACTION);
                          in.addCategory(Intent.CATEGORY_DEFAULT);
                          in.setData(uri);
                          TestActivity.
          this.sendBroadcast(in);
                      }

                  }
          );


          程序B的Receiver:
          @Override
              
          public void onReceive(Context context, Intent intent) {
                  
          if(intent != null)
                  
          {
                      Uri uri 
          = intent.getData();
                      
          if(uri != null)
                      
          {
                          Log.i(
          "BGServiceReceiver""=======================" + uri.getQueryParameter("id"));
                          intent.setClassName(
          "com.backgroundservice",
                          
          "com.backgroundservice.TestBackgroundService");
                          context.startService(intent);
                      }

                          
                  }

          //        try {
          //            Thread.sleep(5000);
          //        } catch (InterruptedException e) {
          //            // TODO Auto-generated catch block
          //            e.printStackTrace();
          //        }
              

              }
          配置:
                  <receiver android:name="ServiceReceiver">
                      
          <intent-filter>
                          
          <action android:name="android.intent.action.STORE_REQUEST"></action>
                          
          <category android:name="android.intent.category.DEFAULT"></category>
                          
          <data android:scheme="http"></data>
                      
          </intent-filter>
                  
          </receiver>

          程序B的發(fā)送BC:
                  Intent in = new Intent();
                  in.setAction(RESPONSE_ACTION);
                  in.addCategory(Intent.CATEGORY_DEFAULT);
                  in.setData(Uri.parse(
          "http://www.xx.com/setList?location=/sdcard/xx.xml"));
                  
          this.sendBroadcast(in);

          如果想讓目標(biāo)Activity或者Service接收到相應(yīng)的Broadcast,就需要完全匹配目標(biāo)Activity或者Service的IntentFilter,否則目標(biāo)Filter無(wú)法接收到相應(yīng)的Broadcast。注意:IntentFilter設(shè)置的時(shí)候都要默認(rèn)帶上CATEGORY_DEFAULT,否則可能會(huì)造成潛在問(wèn)題。
          文檔中的說(shuō)明如下:
          In principle, therefore, an Intent object with no categories should always pass this test, regardless of what's in the filter. That's mostly true. However, with one exception, Android treats all implicit intents passed to startActivity() as if they contained at least one category: "android.intent.category.DEFAULT" (the CATEGORY_DEFAULT constant). Therefore, activities that are willing to receive implicit intents must include "android.intent.category.DEFAULT" in their intent filters.

          ---------------------------------------------------------
          專(zhuān)注移動(dòng)開(kāi)發(fā)

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2010-01-31 19:48 TiGERTiAN 閱讀(4927) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): JavaAndroid
          主站蜘蛛池模板: 佳木斯市| 墨竹工卡县| 清新县| 通辽市| 麻江县| 岚皋县| 洪江市| 剑阁县| 吉安县| 沽源县| 常宁市| 富川| 邵阳市| 綦江县| 金塔县| 宝坻区| 东港市| 临沂市| 介休市| 东安县| 老河口市| 镇坪县| 靖西县| 政和县| 当阳市| 江安县| 兰州市| 金堂县| 陆川县| 宝山区| 阳谷县| 门源| 双流县| 共和县| 珠海市| 汾阳市| 鲜城| 永丰县| 炎陵县| 贺州市| 宜宾市|