2013-05-22 4 views
0

Вместо динамической регистрации я хочу статически зарегистрировать ресивер. Для динамической регистрации, он хорошо работает, я использую это:Каков правильный способ статической регистрации пользовательского широковещательного приемника в Android?

.. 
static private IntentFilter GPSActionFilter; 
.. 
GPSActionFilter = new IntentFilter("GGPS Service"); 
context.registerReceiver(GPSActionReceiver, GPSActionFilter); 
.. 
static private BroadcastReceiver GPSActionReceiver = new BroadcastReceiver(){ 
    public void onReceive(Context context, Intent intent) { ..} 

Для статической регистрации, отладчик никогда не попадет в OnReceive функции, я использую это:

В AndoridManifest:

<receiver android:name="LocationListener$GPSActionReceiver" > 
    <intent-filter> 
     <action android:name="LocationListener.ACTION_GPS_SERVICE" /> 
    </intent-filter> 
</receiver> 

В коде:

public class LocationListener extends BroadcastReceiver 
{ 
    public static IntentFilter GPSActionFilter; 
    public static final String ACTION_GPS_SERVICE = "com.example.LocationListener.GPSActionFilter"; 
    public static BroadcastReceiver GPSActionReceiver; 
    public void onReceive(final Context context, final Intent intent) 
    {..} 
} 

ответ

0

При объявлении действия фильтра намерения в манифесте имя android: name должно быть строковым литералом и не может получить доступ к строкам из классов. Кроме того, я рекомендую вам снабдите ваше полное имя пакета умысла, т.е. действия:

public static final String GPS_SERVICE = "com.example.LocationListener.ACTION_GPS_SERVICE" 

Затем измените

<action android:name="LocationListener.GPS_SERVICE" /> 

Для

<action android:name="com.example.LocationListener.ACTION_GPS_SERVICE" /> 
+0

Спасибо за это предложение. Я включил его. По моему мнению, широковещательная услуга широковещательная и приемник регистрируется для прослушивания одного конкретного намерения, то есть ACTION_GPS_SERVICE. Это так? Или слушатель слушает все трансляции? Если нет, ACTION_GPS_SERVICE нужно будет определить службой вещателя, не так ли? – user1736947

+0

Радиовещательный приемник будет прослушивать только намерение с помощью действия com.example.LocationListener.ACTION_GPS_SERVICE, поэтому вещателю необходимо будет отправить намерение с этим действием. Служба вещателя может отправлять широковещательную передачу следующим образом: context.sendBroadcast (новый Intent (LocationListener.GPS_SERVICE)); –

0

Во-первых, вы не можете иметь privateBroadcastReceiver в манифесте, так как Android должен иметь возможность создать экземпляр его. Пожалуйста, сделайте это общедоступным.

Во-вторых, синтаксис для имени статических внутренних классов: LocationListener$GPSActionReceiver, а не LocationListener.GPSActionReceiver.

+0

Частный BroadcastReceiver не существует для статической регистрации , Infact, Когда у меня есть теги в AndroidManifest, у меня нет кода BroadcastReceiver. Если я зарегистрирую GPSActionReceiver в AndroidManifest, зачем мне нужно иметь newBroadcastreceiver()? У меня только метод onReceive внутри класса LocationListener. Спасибо за предложение синтаксиса. Я исправил это. – user1736947

+0

@ user1736947: Атрибут 'android: name' на' 'должен указывать на открытый Java-класс. По-твоему, нет. – CommonsWare

Смежные вопросы