마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

SMS 내용과 전화번호 받아오기

0 추천

어플 제작중에 어려운점이 있어 이렇게 질문을 해봅니다.

현재 상황으로는 어플이 실행되고 있는 동안 문자를 받으면 전화번호와 메세지를 받는것은 성공했습니다.

그런데 만약 하나의 문자가 아닌 여러개의 문자를 받는다고 했을때 그것을 어떻게 구현해야될지 모르겠습니다. 

코드를 여기저기서 스크랩해와서 완성하긴 했지만 문자메세지 한개만 표현이 가능합니다. 이것을 배열로 저장하여 표현해야할지 어려움이 있고 도움을 구하고자 이렇게 질문해봅니다.

<문자메세지를 받아와서 저장하는 클래스(액티비티에 띄우기 위해 인탠트로 저장했습니다.)

package com.example.haesooo.sms_testtt;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class MyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context mContext, Intent intent) {
        String action =  intent.getAction();

        if("android.provider.Telephony.SMS_RECEIVED".equals(action)){
            Bundle bundle = intent.getExtras();
            Object messages[] = (Object[])bundle.get("pdus");
            SmsMessage smsMessage[] = new SmsMessage[messages.length];

            for(int i = 0; i < messages.length; i++) {
                smsMessage[i] = SmsMessage.createFromPdu((byte[]) messages[i]);
            }

            Date curDate = new Date(smsMessage[0].getTimestampMillis());
            SimpleDateFormat mDateFormat = new SimpleDateFormat("yyyy년 MM월 HH시 mm분 ss초 ", Locale.KOREA);

            String originDate = mDateFormat.format(curDate);
            String origNumber= smsMessage[0].getOriginatingAddress();
            String Message = smsMessage[0].getMessageBody().toString();

            Intent showSMSIntent = new Intent(mContext, MainActivity.class);
            showSMSIntent.putExtra("originNum", origNumber);
            showSMSIntent.putExtra("smsDate", originDate);
            showSMSIntent.putExtra("originText", Message);
            showSMSIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            mContext.startActivity(showSMSIntent);
        }
    }
}


MainActivity

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;


public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView smsDate = (TextView) findViewById(R.id.smsDate);
TextView originNum = (TextView) findViewById(R.id.originNum);
TextView originText = (TextView) findViewById(R.id.originText);

Intent smsIntent = getIntent();

String originNumber = smsIntent.getStringExtra("originNum");
String originDate = smsIntent.getStringExtra("smsDate");
String originSmsText = smsIntent.getStringExtra("originText");

originNum.setText(originNumber);
smsDate.setText(originDate);
originText.setText(originSmsText);
}
}

 

tjrrms7707 (160 포인트) 님이 2017년 11월 18일 질문
해결하셧나요? 저도궁금합니다 ㅜㅜ

1개의 답변

0 추천
가장 편한 방식은

구조는 SMS연락처(전화번호) - 다수의SMS 본문(List) 겠죠.

전화번호 배열 - 각 전화번호 별 SMS본문 배열.

이런 구조입니다.

클래스를 정의하고, 해당 클래스를 Instance로 하는 배열을 구성한 메인 클래스를 정의하고,

gson을 이용해서 파일로 저장하고, 불러오는 형태를 만듭니다.

앱이 실행할때, gson 파일을 불러와서 Object를 생성하고,

변화가 생길 때마다, gson 파일로 overwrite하면 됩니다.
Will Kim (43,170 포인트) 님이 2017년 11월 20일 답변
안녕하세요 질문좀드려도될까요
...