texto programar para pagina mensajes mensaje internet gratis for enviar desde como codigo celulares android binary sms multipart

android - para - programar mensajes whatsapp iphone



¿Cómo enviar sms binarios multiparte en Android? (3)

Estoy tratando de enviar un sms binario en Android. Pero cuando el tamaño del mensaje excede un SMS, recibo diferentes errores según el dispositivo.

Vi que hay un método para enviar sms de texto de varias partes, pero no para enviar sms binarios de varias partes. ¿Entonces qué tengo que hacer?


¡puedes hacer esto por SMS de datos, lo hice y funciona! debe dividir sus datos en el límite del paquete y usar:

smsManager.sendDataMessage(_phoneNumber, null, SMS_PORT, s.getBytes(), sent, deliveredPI);

para cada parte. envía datos por separado y puede recibir normalmente :)


@ amin10043 tiene razón, pero para manejar el mensaje de datos divididos debe hacer algo más porque el receptor no sabe cuántas partes del mensaje serán. Preparé una función que envía un mensaje de datos de varias partes y en el primer byte de mensaje colocaba varias partes:

private void sendEncryptedMessage(String plainMessage) throws IOException { Integer PDU_SIZE = 130; EncryptedMessage encryptedMessage = new EncryptedMessage(plainMessage, recipientEncryptionKey); byte[] messageSerialized = EncryptedMessage.serialize(encryptedMessage); PendingIntent sent = this.createPendingResult(MainConfig.SMS_SENT, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT); SmsManager smsManager = SmsManager.getDefault(); byte[] preparedMessage = new byte[messageSerialized.length + 1]; preparedMessage[0] = 1; System.arraycopy(messageSerialized, 0, preparedMessage, 1, messageSerialized.length); if (preparedMessage.length > PDU_SIZE) { Boolean equalChunks; Integer mLength = preparedMessage.length; Integer numOfChunks = mLength / PDU_SIZE; if (mLength % PDU_SIZE == 0) { preparedMessage[0] = numOfChunks.byteValue(); equalChunks = true; } else { Integer tmpChunks = numOfChunks + 1; preparedMessage[0] = tmpChunks.byteValue(); equalChunks = false; } for (int i = 0; i < numOfChunks; i++) { byte[] chunkArray = Arrays.copyOfRange(messageSerialized, i * PDU_SIZE, (i + 1) * PDU_SIZE); smsManager.sendDataMessage(phoneNo, null, MainConfig.SMS_PORT, chunkArray, sent, null); //todo: dodać jeszcze PendingDeliveryIntent } if (!equalChunks) { byte[] chunkArray = Arrays.copyOfRange(messageSerialized, numOfChunks * PDU_SIZE, mLength); smsManager.sendDataMessage(phoneNo, null, MainConfig.SMS_PORT, chunkArray, sent, null); //todo: dodać jeszcze PendingDeliveryIntent } } else { smsManager.sendDataMessage(phoneNo, null, MainConfig.SMS_PORT, preparedMessage, sent, null); //todo: dodać jeszcze PendingDeliveryIntent } }

Esta es una copia de trabajo de mi método, pero funciona. En el receptor, debe leer el primer byte del mensaje para obtener información sobre la cantidad de partes del mensaje que debería esperar.


Parece que realmente no hay forma de hacer esto.

Encontré a alguien que pidió lo mismo en la lista de desarrolladores de Android hace dos años y hasta ahora no ha recibido ninguna respuesta. Lamentablemente, no encuentro la publicación en este momento, pero hay muchas otras preguntas sobre esto:

Desarrolladores de Android> Envío de sms binarios grandes

Desarrolladores de Android> Función API faltante, enviando sms de datos binarios con más de 1

Desarrolladores de Android> más preguntas sobre SMS

La mejor solución que pude encontrar fue codificar el mensaje como BASE64 y enviarlo como un SMS de TEXTO de varias partes.

Espero que esta respuesta ayude a alguien que busca el mismo pensamiento en el futuro.