Использование фильтров намерений с BroadReceivers Android

пожалуйста, как правильно использовать BroadReceiver в сочетании с фильтрами Intent. В моем файле android_manifest.xml у меня есть эти строки:

        <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>

И в активности я установил приемник с этой функцией

    registerReceiver(broadcastReceiver, null);

Он не работает с нулевым значением, очевидно, ему нужно установить IntentFilter, и я могу добавить его в качестве параметра в функцию, но я спрашиваю, как использовать его с фильтрами намерений, определенными в XML. Спасибо за вашу помощь.

Тизер: я на самом деле заставил его работать со встроенным набором намерений, но я спрашиваю, как заставить его работать с намерением, установленным в XML.


person simekadam    schedule 16.02.2012    source источник


Ответы (2)


вам не нужно определять фильтры намерений в XML-файле, когда вы используете registerReceiver для получения широковещательных сообщений.

В вашем случае вы должны создать класс, который расширяется до BroadcastReceiver, а затем определить этот файл класса в файле манифеста вашего Android. Например:

файл класса:

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

и дополнение в манифесте:

<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>
person waqaslam    schedule 16.02.2012
comment
Понял. У меня не было оболочки получателя в моем xml.. :) Спасибо. - person simekadam; 16.02.2012

Вы можете либо зарегистрировать получателя и фильтры намерений в manifest.xml, как описано выше, либо сделать обе эти вещи динамически:

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

где myreceiver будет приемником расширенного вещания вашего класса. Вы можете просмотреть полный пример здесь.

person SohailAziz    schedule 28.05.2012