隨筆-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無法接收到相應(yīng)的Broadcast。注意:IntentFilter設(shè)置的時(shí)候都要默認(rèn)帶上CATEGORY_DEFAULT,否則可能會(huì)造成潛在問題。
          文檔中的說明如下:
          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.

          ---------------------------------------------------------
          專注移動(dòng)開發(fā)

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2010-01-31 19:48 TiGERTiAN 閱讀(4927) 評(píng)論(0)  編輯  收藏 所屬分類: JavaAndroid
          主站蜘蛛池模板: 民县| 水城县| 富阳市| 莫力| 监利县| 武胜县| 峡江县| 从化市| 马龙县| 五峰| 安远县| 太和县| 将乐县| 泰安市| 东至县| 连城县| 仪陇县| 常宁市| 天等县| 克东县| 昌黎县| 托里县| 弥勒县| 郴州市| 新巴尔虎右旗| 安康市| 正阳县| 普陀区| 榆树市| 加查县| 孟村| 封开县| 建水县| 乌兰察布市| 保山市| 高台县| 沙河市| 宽城| 依兰县| 鸡西市| 甘南县|