2014-06-01 3 views
1

Я пытаюсь обрабатывать новое SMS-сообщение на Android с Xamarin. Я использую реальное устройство, а не виртуальное. Мой обработчик:Отслеживать новые SMS-сообщения с помощью Xamarin

public class SmsBroadcastReceiver : BroadcastReceiver 
{ 
... 
} 

И я программно регистрации приемника в основной деятельности по:

RegisterReceiver(new SmsBroadcastReceiver(), new IntentFilter("android.provider.Telephony.SMS_RECEIVED")); 

В моем коде я добавляю приоритет намерения 10k + (пытался без этого тоже). Также я пробовал зарегистрироваться через config. Приемник не срабатывает. Но если я зарегистрирую событие HEADSET_PLUG, он будет работать без проблем. Разрешения:

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

ответ

0

Вы можете попробовать, как:

[BroadcastReceiver] 
[Android.App.IntentFilter(new []{ SMS_RECEIVER })] 

public class SmsBroadcastReceiver : BroadcastReceiver 
{ 
    private const string SMS_RECEIVER = "android.provider.Telephony.SMS_RECEIVED"; 
    ... 
} 

BTW я не проверял, но я уверен, что это сработает. Пожалуйста, дайте мне знать, как она идет (:

0

Попробуйте это должно работать нормально:

[BroadcastReceiver(Enabled = true, Label = "SMS Receiver")] 
[IntentFilter(new[] { "android.provider.Telephony.SMS_RECEIVED" })] 
public class SMSBroadcastReceiver : BroadcastReceiver 
{ 

    private const string Tag = "SMSBroadcastReceiver"; 
    private const string IntentAction = "android.provider.Telephony.SMS_RECEIVED"; 

    public override void OnReceive(Context context, Intent intent) 
    { 
     Log.Info(Tag, "Intent received: " + intent.Action); 

     if (intent.Action != IntentAction) return; 

     SmsMessage[] messages=Telephony.Sms.Intents.GetMessagesFromIntent (intent); 

     var sb = new StringBuilder(); 

     for (var i = 0; i < messages.Length; i++) 
     { 

      sb.Append(string.Format("SMS From: {0}{1}Body: {2}{1}", messages[i].OriginatingAddress, 
       Environment.NewLine,messages[i].MessageBody)); 
     } 

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