2014-08-29 8 views
1

Я пытаюсь настроить один класс для получения смс и отправленного статуса. Это как мой манифест выглядит для решения этой задачи:Получение и отправка SMS в одном BroadcastReceiver (Android)

 <receiver android:name=".SmsListener" android:permission="android.permission.BROADCAST_SMS" android:exported="true"> 
      <intent-filter android:priority="5822"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
       <action android:name="android.provider.Telephony.SMS_SENT" /> 
      </intent-filter> 
     </receiver> 

Я получаю полученные сообщения, но не присылают сообщения, что-то не так с моей манифеста деклараций?

 PendingIntent _pendingIntent; 
     Intent _intent = new Intent(); 
     _intent.setClass(ParkingOptionsActivity.this, SmsListener.class); // SmsListener extends BroadcastReceiver 
     _intent.putExtra("test","test"); 
     _pendingIntent = PendingIntent.getActivity(ParkingOptionsActivity.this, 0, _intent, 0); 
     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, "test message", _pendingIntent, null); 

ответ

3

Вы должны получить свой PendingIntent с getBroadcast() вместо getActivity(), так как вы хотите, чтобы отправить радиопередачу на свой BroadcastReceiver, не начать Activity.

В текущем коде, вы можете просто изменить эту одну строку:

_pendingIntent = PendingIntent.getBroadcast(ParkingOptionsActivity.this, 0, _intent, 0); 

Кроме того, "android.provider.Telephony.SMS_SENT" действие не присутствует в SDK в настоящее время, и нет никакой системы вещания, когда SMS отправляется. Ваше приложение не нуждается в этом <action> в манифестной записи, так как Intent явно нацеливает ваш класс Receiver.

Если вы планируете использовать это действие для чего-то другого - например, дифференцируя трансляции в onReceive(), получая неявные трансляции из других приложений и т. Д. - тогда вы можете подумать об изменении его, чтобы использовать что-то другое, кроме имени пакета android.provider.Telephony, поэтому чтобы не вызывать потенциального нежелательного поведения или путаницы в будущем. Я бы сказал, что использование имени своего собственного приложения - это норма.

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