2017-10-04 7 views
1

저는 Android 개발을 처음 사용합니다. 내 백그라운드 서비스에서 일부 SMS 메시지를 보내 서버에서 일부 데이터를 가져 와서 일부 클라이언트로 보냅니다. 지금까지는 텍스트 메시지에 몇 가지 설명을 추가 할 때까지 완벽하게 작동했습니다. 그 이후로, 일부 메시지는 전송되지 않습니다. 여기 Android - 보내는 많은 여러 부분 메시지는 일부가 누락 될 수 있습니다.

나는 지금까지 어떤 짓을한다 : 나는 안드로이드 내가 뭔가 잘못하고있는 중이 야 루프 또는 경우에 메시지를 보낼 처리 할 수 ​​있는지 모르는

for (MessageData messageData : result) { 
    String message = messageData.getBody(); 
    String recipient = messageData.getRecipient(); 

    int parts_size = smsManager.divideMessage(message).size(); 
    if (parts_size > 1) { 
     ArrayList<String> parts = smsManager.divideMessage(message); 
       smsManager.sendMultipartTextMessage(recipient, null, parts, null, null); 
    } else { 
     smsManager.sendTextMessage(recipient, null, message, null, null); 
    } 
} 

.

도움 주셔서 감사합니다.

+0

'else'블록에 중단 점을 추가하고 디버거 모드로 실행하십시오. 메시지가 도달했는지 확인하고 설명이있는 메시지의 크기가 160 (SMS 메시지의 최대 크기)보다 작은 지 확인하십시오. – chornge

+0

그렇습니다. 메시지가 160보다 작고 최대 숫자 문자가 491 –

+0

인 경우 DB에 'else'조건부에 도달하면 도달합니다. 이 경우, 당신의'parts_size'가 1보다 크지 않다는 것을 의미합니다. – chornge

답변

0

Mike M's very insightful guidance and code을 사용하여 (크거나 작은) 메시지를 대기열에 넣는 SMS 메시지 전송 서비스를 작성하고 다음 메시지를 보내기 전에 각 메시지가 완전히 전송 될 때까지 기다렸습니다. 실제 작업의 대부분은 백그라운드에서 수행됩니다.

SmsService.java is a gist on GitHub 여기에 붙여 넣기에는 약간 큽니다.

내 목표 중 하나는 하나의 안드로이드 구성 요소에 필요한 기능을 넣을 수 있는지 확인하는 것이 었습니다. 적은 수의 메시지로 테스트되었지만 아직 실험적입니다. (예 : BroadcastReceiver 사용을 피하고 시스템에서 보낸 서비스 시작 ID의 고유성에 의존하며 메시지를 나타내는 의도에 크게 의존합니다.)

이 클래스에는 메시지를 보내고 설정하는 세 가지 정적 방법이 있습니다. 그리고 그것을 찢어 버리십시오 :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 
    SmsService.setup(this); 
} 

private void sendMyMessages() { 
    SmsService.send(this, recipient, sender, "the message text"); 
} 

@Override 
protected void onDestroy() {  
    SmsService.teardown(this); 
    ... 
}