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.
- Mono para Android, el campo de entrada de WebView filechooser no funciona
- ¿Cómo hacer un intervalo de sombra de cadena en Android?
- ¿Cuál es el valor de REQUEST_CHECK_SETTINGS?
- Componente inutilizable HockeyApp para Android (tienda de componentes Xamarin)
- Descenso Xamarin.Android
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!
- Cómo recibir URL con filtros de intenciones Xamarin
- ¿Incompatibilidades de la capa de servicio MonoTouch / MonoDroid?
- Proyecto MonoDroid en una soultion que contiene un proyecto de teléfono de Windows 7?
- ¿Puedo obtener una devolución de llamada en la clase de aplicación siempre que se inicie una nueva actividad en toda la aplicación?
- Desarrollo de la aplicación C # móvil para ejecutarse en múltiples plataformas
- Necesita un ejemplo de tomar una imagen con MonoDroid y MVVMCross
- Icono de aplicación Crear una información de superposición (número)?
- GetAllNetworkInterfaces () lanza la excepción
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>
- Android Wear envía datos al teléfono Android, pero parece que el teléfono nunca lo recibe
- Cómo establecer el elemento seleccionado en BottomNavigationView