문자 수신 시 앱에서 문자를 인식 할 수 있습니다.


Receiver 하나 등록하면 바로 가능합니다.


1. AnddroidManifest에 permission 등록 및 receiver 등록

<!-- SMS receive permission -->
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<!-- SMS read -->
<uses-permission android:name="android.permission.READ_SMS" />
<!-- SMS receiver -->
<receiver android:name=".receiver.SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

2. BroadCaseReceiver class 만들기

public class SmsReceiver extends BroadcastReceiver {
public static final String TAG = "SmsReceiver";
public static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";

@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(ACTION)) {
Bundle bundle = intent.getExtras();
if(null == bundle) {
return;
}

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
SmsMessage[] smsMessages = Telephony.Sms.Intents.getMessagesFromIntent(intent);

for(int i = 0 ; i < smsMessages.length ; i++) {
SmsMessage smsMessage = smsMessages[i];
setMessage(context, smsMessage);
}
} else {
Object[] pdusObj = (Object[]) bundle.get("pdus");
if(null == pdusObj) {
return;
}
SmsMessage[] smsMessages = new SmsMessage[pdusObj.length];
for(int i = 0 ; i < pdusObj.length ; i++) {
smsMessages[i] = SmsMessage.createFromPdu((byte[]) pdusObj[i]);

setMessage(context, smsMessages[i]);
}
}
}
}

private void setMessage(Context context, SmsMessage smsMessages) {
Log.d(TAG, "DisplayMEssageBody :: " + smsMessages.getDisplayMessageBody());
Log.d(TAG, "DisplayOrinatingAddress" + smsMessages.getDisplayOriginatingAddress());
Log.d(TAG, "EmailBody :: " + smsMessages.getEmailBody());
Log.d(TAG, "originatingAddress :: " + smsMessages.getOriginatingAddress());
Log.d(TAG, "MessageBody :: " + smsMessages.getMessageBody());
Log.d(TAG, "serviceCenterAddress :: " + smsMessages.getServiceCenterAddress());
Log.d(TAG, "time :: " + smsMessages.getTimestampMillis());

// Todo 요기에서 message를 가지고 작업하시면 됩니다.
}
}

 

+ Recent posts