2017. 9. 22. 16:17 Android
[Android] Broadcast Receiver 를 이용하여 SMS 수신
브로드캐스트 리시버는 안드로이드에서 발생하는 여러 동작(화면이 on/off, 전원이 on/off, SMS 수신등..)들을 받고자 하는 곳에 알려주는 기능을 합니다. 방송알림정도로 표현을 할 수 있습니다.
먼저 SMS를 수신하기 위해서는 manifests 파일에 SMS에 대한 권한을 추가해야 합니다.
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
또한 SMS가 왔을 때 수신을 받기위해 BroadcastReceiver를 추가해줘야 합니다.
아래의 예시 코드를 참고
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".SMSReceiver">
<intent-filter >
<!-- 문자를 받을 수 있도록 intent filter를 추가 -->
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
</application>
이제 BroadcastReceiver 부분에서 SMS를 받았을 때의 액션을 처리하면 됩니다.
SMS에 대한 액션일때만 처리하기 위해 intent의 액션을 비교하여 처리하였다.
아래 예시코드를 참고
public class SMSReceiver extends BroadcastReceiver {
private String SMSACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(SMSACTION)){
Bundle bundle = intent.getExtras();
if(bundle != null){
Object[] pdusObjArr = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObjArr.length];
for(int i = 0 ; i < pdusObjArr.length ; i++){
messages[i] = SmsMessage.createFromPdu((byte[]) pdusObjArr[i]);
}
Date curDate = new Date(messages[0].getTimestampMillis());
Log.d("@@문자 수신 시간", curDate.toString());
String number = messages[0].getOriginatingAddress();
Log.d("@@발신 번호 확인", number);
String smsBody = messages[0].getMessageBody().toString();
Log.d("@@문자 내용", smsBody);
}
}
}
}
핸드폰 인증에 대한 인증번호를 가져오는 방식도 SMS 내용을 가져오고 원하는 부분만 찾아서 사용하면 됩니다.
'Android' 카테고리의 다른 글
[Android] 안드로이드 운영체제 버전 (0) | 2017.09.13 |
---|---|
[Android] GCM을 이용하여 디바이스 상태 체크 및 Error Code (0) | 2017.09.13 |
[Android] 안드로이드스튜디오에서 release key 생성하기 (0) | 2017.09.12 |
[Android] getIntent() 받은 값 삭제하기 (0) | 2017.09.12 |
[Android] google map api 연동하기 (0) | 2017.09.08 |