본문 바로가기
IT,과학/프로그래밍

안드로이드 LMS 문자 받기 및 문자 보내기

by 오우너 2015. 7. 15.
728x90
반응형

sms문자가 오면 받아서 정해논 번호로 sms문자를 보내는 프로젝트

<마눌이 카드사에서 문자 온 것을 자기 폰으로 문자를 보내게 만들어 달라고 해서.. 시작!!!!>

 

 

마지막 수정이 되길...

 

현재까지의 문제점

- SMS전송은 잘되나 LMS로 보내려 하면 문자가 계속 SMS로 쪼개져 보내진다.

- 텍스트를 앞을 잘라도 계속SMS로 쪼개져 보내진다. 이틀정도 골머리를 썩었다.

- 알고보니 어이가 없었다. SKT 스카이NO.6스마트폰을 쓰고 있었는데 LMS는 SMS두개로 나뉘어 받는 것이 아닌가...헐...

   두 개 쪼개져서 오니 두개로 쪼개져서 보낼 수 밖에...쩝...

 

문제점 해결

- Bundle를 사용, 키를 전화번호로 해서 문자내용을 저장 나뉘어진 문자를 하나로 통합

  sendMultipartTextMessage로 내용을 보내자!!!

   => // 같은 번호로 온 문자를 앞 내용에 더하여 저장...[이부분이 아주 중요할 줄이야...]

 

 

우선 AndroidManifest.xml에 권한 설정 추가

권한 설정이 직관적이라 설명이 필요 없네...

   

<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_MMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>

 

 

 

// 인텐트로 받은 메시지 가져오기

 

Intent intent = getIntent();
Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
        
msgs = new SmsMessage[messages.length];
        
for(int m = 0; m < msgs.length; m++) {
    msgs[m] = SmsMessage.createFromPdu((byte[])messages[m]);
}
        
setContentView(R.layout.send);
       
mHandler.sendEmptyMessageDelayed(0,100);  

mCounthandleMessage = 0;

 

 

// 핸들러(mHandler) 내용 [Handler mHandler = new Handler()]

 

Bundle map = new Bundle();

 

for(int m = 0; m < msgs.length; m++) {     
    // 보낸 전화 번호
    String strDisplayOriginatingAddress = msgs[m].getDisplayOriginatingAddress();        
           
    // 보낸 내용
    String strDisplayMessageBody = msgs[m].getDisplayMessageBody(); 

 

    // 보낸 전화번호가 있어야 전송 가능
    if(strDisplayOriginatingAddress != null && strDisplayOriginatingAddress != "" &&

        strDisplayOriginatingAddress.equals("원하는 전화 번호만 저장") ) {

        // 같은 번호로 온 문자를 앞 내용에 더하여 저장...[이부분이 아주 중요할 줄이야...]
        if(!map.containsKey(strDisplayOriginatingAddress))
                map.putString(strDisplayOriginatingAddress, strDisplayMessageBody);
        else {
             strDisplayMessageBody = map.getString(strDisplayOriginatingAddress) + strDisplayMessageBody; 
             map.putString(strDisplayOriginatingAddress, strDisplayMessageBody);
        }
    }

 

Set<String> mapkeyset = map.keySet();
Iterator<String> iter = mapkeyset.iterator();


while(iter.hasNext()) {
    String temp = iter.next();        
    String strbody = map.getString(temp);

 

     // SMS Manager
     SmsManager sms = SmsManager.getDefault();
     
     // LMS메시지 보내기
     ArrayList<String> parts = sms.divideMessage(strbody);
     sms.sendMultipartTextMessage("받을 전화 번호 넣기", null, parts, null, null);

}      

 
map.clear();     

 

 

 

 

728x90
반응형

댓글