2012-02-16 19 views
6

xin như thế nào là đúng cách để sử dụng broadcastReceiver phối hợp với các bộ lọc Ý định .. Trong file android_manifest.xml của tôi, tôi có những dòng:Sử dụng các bộ lọc ý với broadcastReceivers Android

 <activity android:name=".DataDisplayActivity" android:theme="@android:style/Theme.Holo.NoActionBar" android:icon="@drawable/icon_3d" android:label="AdvancedHyperXPositiveSuperFluousApp"> 
     <intent-filter> 
      <action android:name="com.simekadam.blindassistant.UPDATE_GPS_UI"/> 
      <action android:name="com.simekadam.blindassistant.UPDATE_CONTEXT_UI"/> 
     </intent-filter> 
     <intent-filter > 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

     </activity> 

Và trong hoạt động tôi đặt người nhận có chức năng này

registerReceiver(broadcastReceiver, null); 

nó thất bại trên null, obvi nó cần các IntentFilter được thiết lập và tôi có thể thêm nó inline như param đến chức năng, nhưng tôi hỏi, làm thế nào để sử dụng nó với mục đích XML định nghĩa bộ lọc..Cảm ơn sự giúp đỡ của bạn

Teaser: Tôi thực sự đã nhận nó làm việc với inline bộ ý định, nhưng tôi hỏi làm thế nào để làm cho nó làm việc với các thiết lập mục tiêu trong XML ..

Trả lời

16

bạn không cần phải xác định mục đích, các bộ lọc trong xml của bạn khi bạn đang sử dụng registerReceiver để nhận chương trình phát sóng.

Trong trường hợp của bạn, bạn nên tạo một lớp mở rộng đến BroadcastReceiver và sau đó xác định tệp lớp đó trong tệp kê khai của Android của bạn. ví dụ:

lớp file:

package your.package.name; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class MyCustomReceiver extends BroadcastReceiver { 

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

     if(action.equals("com.simekadam.blindassistant.UPDATE_GPS_UI")){ 
      //do something 
     } 
     else if(action.equals("com.simekadam.blindassistant.UPDATE_CONTEXT_UI")){ 
      //do something 
     } 
    } 
} 

, bổ sung trong manifest:

<receiver android:name=".MyCustomReceiver" android:enabled="true"> 
    <intent-filter> 
     <action android:name="com.simekadam.blindassistant.UPDATE_GPS_UI" /> 
     <action android:name="com.simekadam.blindassistant.UPDATE_CONTEXT_UI" /> 
    </intent-filter> 
</receiver> 
+0

OK ..Không có trình bao bọc người nhận trong xml của tôi .. :) Cảm ơn bạn – simekadam

5

Bạn có thể đăng ký nhận của bạn và ý-bộ lọc trong manifest.xml như đã giải thích ở trên hoặc bạn có thể làm cả hai thứ này đều linh hoạt như:

Myreceiver reMyreceive = new Myreceiver(); 
IntentFilter filter = new IntentFilter("actionname"); 
registerReceiver(reMyreceive, filter); 

nơi người gửi thư sẽ là lớp học của bạn bộ thu phát mở rộng. Bạn có thể xem ví dụ hoàn chỉnh here.

Các vấn đề liên quan