2015-07-17 2 views
2

У меня есть деятельность, эта операция вызовет услугу, и эта служба вызовет широковещательную рассылку для прослушивания отправки SMS. Я регистрирую широковещательную рассылку в Сервисе динамически.
Но это не работает. Мой код ниже. Пожалуйста, помогите мне решить. Это метод onCreate в Сервисе.Зарегистрировать широковещательный приемник в службе

@Override 
public void onCreate() { 
    super.onCreate(); 
    final IntentFilter filter = new IntentFilter(); 
    filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 

    this.registerReceiver(new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      showSuccessfulBroadcast(); 

     } 
    }, filter); 
} 
+0

проверки ссылка: http://stackoverflow.com/questions/4462037/register-receiver-in-a-service – darwin

+0

Post код для 'onStartCommand()' в вашем сервисе. Является ли ваша служба «IntentService»? –

+0

Определите «не работает». Может быть, вы имеете в виду, что ваш приемный метод не вызывался при получении SMS? – LarsH

ответ

0

Код верный. Не забудьте объявить разрешение на использование в AndroidManifest.xml и отменить регистрацию получателя в onDestroy(). Оба момента важны.

<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 

Внутри вашей службы

private BroadcastReceiver mSmsBroadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     showSuccessfulBroadcast(); 
    } 
}; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    final IntentFilter filter = new IntentFilter(); 
    filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 

    this.registerReceiver(mSmsBroadcastReceiver, filter); 
} 

@Override 
public void onDestroy() { 
    this.unregisterReceiver(mSmsBroadcastReceiver); 
} 
+0

Вы забыли упомянуть фильтр намерений в манифесте. – Alpha

+0

Не требуется для динамически зарегистрированных широковещательных приемников. –

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