2012-06-15 6 views
1

Android에서 이진 SMS를 보내려고합니다. 그러나 메시지의 크기가 1 sms를 초과하면 장치에 따라 다른 오류가 발생합니다.안드로이드에서 멀티 파트 바이너리 SMS를 보내는 방법은 무엇입니까?

여러 부분으로 구성된 문자 SMS를 보내는 방법이 있지만 여러 부분의 이진 SMS를 보내는 방법이 없습니다. 그래서, 내가 뭘해야 해?

+0

길이가 한 메시지보다 짧은 이진 메시지를 보낼 수 있었습니까? 또한이 질문에 대한 답을 얻은 경우, 게시하면 도움이 될 것입니다. 또는 다른 대체 방법을 말해주십시오. –

답변

1

실제로 이렇게 할 방법이없는 것으로 보입니다.

나는 2 년 전에 Android 개발자 목록에서 이와 똑같은 질문을 한 사람을 발견했으며 지금까지 답변을받지 못했습니다. 불행하게도, 지금은 포스트를 찾는 아니지만, 이것에 대해 많은 질문이 있습니다 : 내가 온 수있는 가장 좋은 방법은에서 인코딩하는 것이 었습니다

Android Developers › Sending big binary sms

Android Developers › Missing API functionallity sending binary data sms with more that 1

Android Developers › more SMS questions

은 BASE64로 메시지를 보내고 multipart TEXT sms로 보냅니다.

나는이 대답이 앞으로도 똑같은 생각을하는 데 도움이되기를 바랍니다.

1

데이터 SMS로이 작업을 수행 할 수 있습니다. 당신은 패킷 제한 및 사용에 데이터를 분할해야 각 파트에 대한

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

합니다. 데이터를 개별적으로 보내면 정상적으로 수신 할 수 있습니다.

0

@ amin10043 메시지가 많은 부분을 수신자가 알 수 없기 때문에 더 복잡한 메시지를 처리해야합니다. 나는 다중 데이터 메시지를 전송하는 기능을 준비했습니다 및 메시지의 첫 번째 바이트에 부품의 숫자 위치 : 작동

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 
    } 

} 

내 방법이 작동하고 복사 할 수 있지만합니다. 수신기에서는 메시지의 첫 번째 바이트를 읽어야 메시지의 얼마나 많은 부분을 기대해야하는지 알 수 있습니다.

관련 문제