Recepción de SMS con MonoDroid

Editar: Esto ahora se resuelve – publicar solución aquí en caso de que alguien lo necesita en el futuro o cualquier persona puede sugerir una mejor manera de hacer esto. Quité el material de intención de mi manifiesto y sólo configurar el BroadcastReceiver en mi clase SmsReceiver. Esto ahora funciona.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Android.App; using Android.Content; using Android.OS; using Android.Runtime; using Android.Views; using Android.Widget; using Android.Util; using Android.Telephony; namespace dummyAndroid { [BroadcastReceiver(Enabled = true, Label = "SMS Receiver")] [IntentFilter(new string[] { "android.provider.Telephony.SMS_RECEIVED" })] public class SmsReceiver : Android.Content.BroadcastReceiver { public static readonly string INTENT_ACTION = "android.provider.Telephony.SMS_RECEIVED"; public override void OnReceive(Context context, Intent intent) { if (intent.Action == INTENT_ACTION) { StringBuilder buffer = new StringBuilder(); Bundle bundle = intent.Extras; if (bundle != null) { Java.Lang.Object[] pdus = (Java.Lang.Object[])bundle.Get("pdus"); SmsMessage[] msgs; msgs = new SmsMessage[pdus.Length]; for (int i = 0; i < msgs.Length; i++) { msgs[i] = SmsMessage.CreateFromPdu((byte[])pdus[i]); Log.Info("SmsReceiver", "SMS Received from: " + msgs[i].OriginatingAddress); Log.Info("SmsReceiver", "SMS Data: " + msgs[i].MessageBody.ToString()); } Log.Info("SmsReceiver", "SMS Received"); } } } } } 

Estoy escribiendo una aplicación que envía / recibe mensajes SMS y tengo el envío de trabajo a través de SMS Mananger.

Ahora estoy tratando de recibir SMS en Mono para Android y soy nuevo para el desarrollo de Android, así que probablemente estoy haciendo algo mal!

He añadido lo siguiente a mi manifiesto

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.me.dummyAndroid" android:versionCode="1" android:versionName="1"> <uses-sdk android:targetSdkVersion="8" /> <application android:label="meAndroidSMS" android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> <receiver android:name=".SmsReceiver"> <intent-filter> <action android:name= "android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> </manifest> 

A continuación, creé una nueva clase llamada SmsReceiver.cs que he añadido la función onReceive en pero no parece ser la función getExtras dentro de la intención que de acuerdo con el tutorial en línea que he leído necesitaría ( http: // www. Techques.com/question/1-3542320/IPhone-Android-SMS-intercept-and-redirection-to-an-application .).

 namespace dummyAndroid { class SmsReceiver { public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); } } } 

Aprecio estoy en un poco más de mi cabeza en Android y MonoDroid seguro, pero tal vez alguien puede señalarme en la dirección correcta!

Tengo un código de trabajo aquí (no puedo recordar la fuente, pero creo que fue alguien asociado con Xamarin quien escribió este ejemplo), que muestra un brindis cuando se recibe un SMS.

 using System.Text; using Android.App; using Android.Content; using Android.Runtime; using Android.Util; using Android.Widget; using Android.Telephony; using Environment = System.Environment; namespace MonoDroid.SMSFun { [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; var bundle = intent.Extras; if (bundle == null) return; var pdus = bundle.Get("pdus"); var castedPdus = JNIEnv.GetArray<Java.Lang.Object>(pdus.Handle); var msgs = new SmsMessage[castedPdus.Length]; var sb = new StringBuilder(); for (var i = 0; i < msgs.Length; i++) { var bytes = new byte[JNIEnv.GetArrayLength(castedPdus[i].Handle)]; JNIEnv.CopyArray(castedPdus[i].Handle, bytes); msgs[i] = SmsMessage.CreateFromPdu(bytes); sb.Append(string.Format("SMS From: {0}{1}Body: {2}{1}", msgs[i].OriginatingAddress, Environment.NewLine, msgs[i].MessageBody)); } Toast.MakeText(context, sb.ToString(), ToastLength.Long).Show(); } } } 

AndroidManifest.xml:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="internalOnly" package="monodroid.smsfun" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:targetSdkVersion="8" /> <application android:label="SMSFun"> </application> <uses-permission android:name="android.permission.RECEIVE_SMS" /> </manifest> 
  • Xamarin Android ProGuard Habilitar
  • Objeto refrence no establecido en una instancia de un objeto Cuando creo nueva aplicación de Android (Visual Studio)
  • "Aapt.exe" salió con el código 1 al crear el proyecto Mono para Android
  • Xamarin Studio (Android) Error Inflando clase <unknown> A menos que se limpie
  • C # barra de progreso circular xamarin - Android
  • Xamarin pérdida de memoria Android con actividad simple
  • Mono para Android - ¿Cómo funciona?
  • Error al utilizar la Biblioteca de asistencia de Android v4
  • Cómo determinar el tipo MIME de archivo en android?
  • MonoDroid GetSpans último parámetro
  • System.ObjectModel Advertencia Xamarin no se ejecuta en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.