Acerca del puerto SMS de Android

Quiero implementar una aplicación que recibe SMS en un puerto específico.

Código Manifiesto:

<receiver android:name=".BinarySMSReceiver"> <intent-filter> <action android:name="android.intent.action.DATA_SMS_RECEIVED"/> <data android:port="8091"/> <data android:scheme="sms"/> </intent-filter> </receiver> 

Y el código de la clase del receptor abajo.

 public class BinarySMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); SmsMessage[] msgs = null; if(null != bundle) { String info = "Binary SMS from "; Object[] pdus = (Object[]) bundle.get("pdus"); msgs = new SmsMessage[pdus.length]; byte[] data = null; for (int i=0; i<msgs.length; i++){ msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); info += msgs[i].getOriginatingAddress(); info += "\n*****BINARY MESSAGE*****\n"; data = msgs[i].getUserData(); for(int index=0; index<data.length; ++index) { info += Character.toString((char)data[index]); } } Toast.makeText(context, info, Toast.LENGTH_SHORT).show(); } } } 

Estoy recibiendo todos los SMS que están en este puerto ( 8091 ) o no. Quiero recibir sólo los mensajes que son específicos de puerto.

Para aquellos que todavía se preguntan por qué la aplicación está recibiendo datos SMS dirigidos a otros puertos y no sólo al puerto 8091. El problema radica en el código Manifest. He visto muchas soluciones que se publicaron y la mayoría de ellos son realmente mal.

El Manifiesto debe ser:

 <receiver android:name = ".SmsReceiver"> <intent-filter> <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> <data android:scheme="sms" android:host="*" android:port="8095" /> </intent-filter> </receiver> 

Los atributos esquema, host y puerto deben definirse en un solo elemento "data" del filtro de intenciones, no en elementos separados de "datos".

También no es que desde este enlace , en la sección "prueba de datos" se indica que
"El host y el puerto juntos constituyen la autoridad URI, si no se especifica un host, el puerto se ignora".
Por lo tanto, tenga en cuenta que debe especificar el host si desea que la aplicación reciba los datos de SMS para sólo un puerto específico.

El elemento "host" es * (asterisco) es especificar que acepta datos SMS de todos los hosts / números de teléfono

Espero que esto ayude a alguien (:

Tuve el problema similar, apenas agrego la condición siguiente de la comprobación en el comienzo de su 'onReceive' código:

 String dataStr = intent.getDataString(); if (dataStr.indexOf(":8888" ) == -1) { return; } 
  • Enviar SMS a través de PhoneGap en Android
  • Verificar el usuario durante la suscripción enviando y recibiendo sms a través de Twilio
  • ¿Cómo obtengo el nombre guardado de SMS Sender Contact (Person) mediante "content: // sms / inbox"
  • Programáticamente eliminar SMS no funciona
  • Mantener un registro de los SMS enviados en Android
  • Sms de prueba de Android del emulador
  • Registrar BroadcastReceiver para SMS entrantes
  • Los datos de Android enviados entre dos emuladores se truncan en tránsito
  • Android: recibe SMS largos (multipart)
  • Inicie sms Actividad @ ConversarionList.class de mi propia aplicación
  • Android - Determinar el límite de texto SMS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.