隨筆-348  評論-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的發送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的發送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);

          如果想讓目標Activity或者Service接收到相應的Broadcast,就需要完全匹配目標Activity或者Service的IntentFilter,否則目標Filter無法接收到相應的Broadcast。注意:IntentFilter設置的時候都要默認帶上CATEGORY_DEFAULT,否則可能會造成潛在問題。
          文檔中的說明如下:
          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.

          ---------------------------------------------------------
          專注移動開發

          Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
          posted on 2010-01-31 19:48 TiGERTiAN 閱讀(4936) 評論(0)  編輯  收藏 所屬分類: JavaAndroid
          主站蜘蛛池模板: 文水县| 伊金霍洛旗| 巴塘县| 南京市| 炎陵县| 上杭县| 陇西县| 林口县| 海晏县| 米脂县| 宜春市| 临海市| 丘北县| 西峡县| 四子王旗| 湛江市| 通许县| 防城港市| 庄浪县| 璧山县| 青河县| 页游| 清水河县| 尉氏县| 泽州县| 隆林| 凭祥市| 海伦市| 醴陵市| 霍林郭勒市| 弋阳县| 昔阳县| 云浮市| 屯留县| 衡东县| 敖汉旗| 凌源市| 丹巴县| 天峨县| 松溪县| 宁河县|