내 앱에서 SMS 문자 메시지를 전송하는 방법을 알아보자.
당연히 안드로이드 시스템 기본 앱을 통해 메시지를 전송하는 방식이다.
지난 '전화 앱 연결하기' 포스팅과 동일하게 2가지 방법을 소개한다.
- 앱에서 입력받은 데이터를 (전화번호, 메시지 내용) 가지고 문자 앱으로 이동
- 앱에서 직접 문자 메시지 전송
✅ 문자 메시지 앱으로 이동
메시지를 보낼 상대의 전화번호와 메시지 내용을 가지고
문자 메시지 앱으로 이동하는 방법이다.
문자 메시지가 전송까지 한 번에 실행되지는 않지만,
전송하기 전에 한 번 더 체크할 수 있다는 장점이 있다.
MainActivity.kt
button.setOnClickListener {
val phoneNumber = "smsto:01012345678"
val message = "테스트 문자입니다."
val intent = Intent(Intent.ACTION_SENDTO, Uri.parse(phoneNumber))
intent.putExtra("sms_body", message)
startActivity(intent)
}
버튼을 누르면 문자 메시지 앱으로 이동하는 동작이다.
위 처럼 Intent를 사용하여 간단하게 구현할 수 있으며, 유심히 볼 부분은 다음과 같다.
- 전화번호 문법으로는 "smsto:{전화번호}" 와 같은 형식을 Uri 타입으로 작성해준다.
- Intent 액션은 ACTION_SENDTO 로 지정해준다.
(ACTION_SEND 도 가능하지만, 이는 일부 기기에서는 동작하지 않는다)
- "sms_body" 키와 메시지 내용을 값으로 putExtra() 해준다.
🎈 결과
앱에서 만들어준 버튼을 누르면,
메시지 앱으로 이동되며 데이터가 입력되어 있는 모습을 확인할 수 있다.
당연히 모르는 분의 번호이기 때문에 전송하진 않는다.
✅ 앱에서 직접 문자 메시지 전송
문자 메시지 앱으로 이동하지 않고, 내 앱에서 직접 문자를 전송하는 방법이다.
AndroidManifest.xml
<uses-permission android:name="android.permission.SEND_SMS" />
먼저 SMS 전송 관련 권한을 매니페스트에 선언해준다.
MainActivity.kt
fun checkPermission() {
TedPermission.create()
.setPermissionListener(object : PermissionListener {
override fun onPermissionGranted() {
sendSms()
}
override fun onPermissionDenied(deniedPermissions: List<String>) {
// 권한 거부 시 동작
})
.setDeniedMessage("권한을 허용해 주셔야\n사용 가능합니다.")
.setPermissions(android.Manifest.permission.SEND_SMS)
.check()
}
그리고 위 권한을 사용자에게 요청해준다.
오늘도 역시 TedPermission 라이브러리 활용하여 간편하게 권한을 요청해주었다.
권한 허용 시 sendSms() 함수를 호출한다.
MainActivity.kt
private fun sendSms() {
val phoneNumber = bind.receiveEdittext.text.toString()
val message = bind.contentEdittext.text.toString()
val smsManager = getSystemService(SmsManager::class.java)
smsManager.sendTextMessage(phoneNumber, null, message, null, null)
}
sendSms() 함수에는 SmsManager 클래스를 활용하여 문자 메시지를 전송하는 동작을 정의해준다.
EditText에 전화번호와 메시지 내용을 입력받아서 진행하였다.
SmsManager 객체를 초기화하는 방법으로 기존에는 SmsManager.getDefault() 함수를 사용했었는데,
현재는 Deprecated 되었기 때문에, getSystemService() 방식을 사용했다.
sendTextMessage() 함수의 파라미터는 5개를 작성해줘야 한다.
(destinationAddress, scAddress, text, sentIntent, deliveryIntent)
- destinationAddress
수신자 전화번호를 String 객체를 입력하면 되며, 필수 값이다.
첫 번째 예제처럼 "smsto:"를 붙이지 않아도 되고 순수 전화번호만 입력하면 된다.
- scAddress
SMSC (메시지 서비스 센터) 주소를 입력하는 파라미터지만 null이 허용된다.
null 입력 시 기기의 기본 SMSC가 자동 적용된다.
- text
전송할 메시지 내용을 String 객체를 입력하며, 필수 값이다.
- sentIntent
전송 결과 확인을 위한 PendingIntent 객체를 입력하며, null이 허용된다.
- deliveryIntent
메시지 수신 확인을 위한 PendingIntent 객체를 입력하며, null이 허용된다.
🎈 결과
2개의 EditText에 전화번호와 문자 내용을 입력 후 버튼을 누르면
SMS 관련 권한이 요청되며, 허용 버튼을 눌러준다.
전화번호는 본인 전화번호이므로 가렸다.
문자 메시지 앱에 직접 들어가보면 메시지가 전송된 것을 확인할 수 있다.
Intent와 SmsManager를 활용하여 문자 메시지 전송 기능을 구현해보았다.
'Android (안드로이드)' 카테고리의 다른 글
[Android] 전화 앱 연결하기 / 내 앱에서 전화걸기 (0) | 2025.01.16 |
---|---|
[Android] DrawerLayout / 서랍장 화면 (0) | 2025.01.15 |
[Android] Snackbar / 스낵바 사용해보기 (2) | 2025.01.14 |
[Android] Context / Application Context / Activity Context (6) | 2025.01.13 |
[Android] DownloadManager / HTTP 통신으로 파일 다운로드하기 (0) | 2025.01.10 |