2012-05-10 2 views
1

Это мой файл службы:BroadcastReceiver в службе не работает

public class SMSCounterService extends Service { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate() { 
     Log.d(LOG_TAG, "SMSCounterService: Constructor"); 
     super.onCreate(); 
     dbActivities = new DBActivities(this); 
     dbActivities.open(); // Create or open the existing DB if already created 

     IntentFilter filter = new IntentFilter(); 
     filter.addAction("android.provider.Telephony.SMS_SENT"); 
     registerReceiver(receiver, filter); 
    } 

    @Override 
    public void onDestroy() { 
     unregisterReceiver(receiver); 
     dbActivities.close(); 
     super.onDestroy(); 
    } 

    private final BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if(intent.getAction().equals("android.provider.Telephony.SMS_SENT")) { 
       smsCount++; 
       Log.d(LOG_TAG, "SMSCounterService: smsCount=" +smsCount); 
       long dbInsertReturn = dbActivities.insertIntoDB(smsCount); 
      } 
     } 
    }; 

Я могу видеть журнал «SMSCounterService: Constructor». Поэтому вызывается метод onCreate(). Но когда я отправляю SMS-сообщение, BroadcastReceiver не может его идентифицировать.

+0

Правильные ли разрешения, установленные в вашем манифесте? Я думаю, что это разрешение RECEIVE_SMS http://developer.android.com/reference/android/Manifest.permission.html –

+1

что заставляет вас думать, что есть какие-либо намерения при отправке смс? И почему вы считаете, что цель - «android.provider.Telephony.SMS_SENT»? Я думаю, что ваш приемник в порядке. Сделайте простое приложение только с одной кнопкой, и при нажатии этой кнопки просто отправьте намерение android.provider.Telephony.SMS_SENT и посмотрите, может ли ваш приемник хорошо его поймать. Если это так, то я был прав, и нет никакого такого намерения, когда будет отправлено SMS. –

+0

Что @ alex.veprik написал полностью правильно - afaik, там нет трансляции SMS_SENT, только SMS_RECEIVED. – Jens

ответ

0

AFAIK, есть нет намерения как android.provider.Telephony.SMS_SENT. Я сделал «grep» через Ice Cream Sandwich и не смог его найти.

Перейдите с помощью подхода ContentObserver. Зарегистрируйте своего наблюдателя, чтобы прослушивать поставщика сообщений об обновлениях. (Решил зарегистрировать его как ответ, кто знает, может быть, кто-нибудь его примет;))

+0

Спасибо за ответ. Я сделал некоторые исследования самостоятельно и понял, что ContentObserver - единственный способ продвижения на данный момент. Попробует сегодня и, надеюсь, все пойдет хорошо :) – webgenius

0

Убедитесь, что вы добавили требуемое разрешение (ы) в вашем AndroidManifest.xml

Для отправки:

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

Для получения:

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

избили меня к нему ... –

+0

@Waqas: Добавление разрешений не поможет, так как я не отправляю и не получаю SMS в своем приложении. Меня интересует только случай использования, когда какое-то другое приложение обмена сообщениями отправляет SMS-сообщение. – webgenius

+0

Я не думаю, что вы можете знать о событиях, когда другие приложения отправляют sms – waqaslam

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