SMS 메시지는 브로드캐스트 리시버를 통해 수신됩니다.
android.provider.Telephony.SMS_RECEIVEDAndroidManifest.xml에 리시버를 등록하거나, 코드에서 동적으로 등록할 수 있습니다.<receiver android:name=".SMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
Intent에 포함된 PDUs(Protocol Data Units) 형태로 전달됩니다. 이를 디코딩해 메시지와 발신자 정보를 추출할 수 있습니다. @Override
public void onReceive(Context context, Intent intent) {
if ("android.provider.Telephony.SMS_RECEIVED".equals(intent.getAction())) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus != null) {
for (Object pdu : pdus) {
SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdu);
String sender = sms.getOriginatingAddress();
String message = sms.getMessageBody();
Log.d("SMSReceiver", "Sender: " + sender + ", Message: " + message);
}
}
}
}
}
content://sms/ URI를 통해 Android 시스템 데이터베이스에 저장됩니다.content://sms/inboxcontent://sms/sentSMS를 처리하려면 아래 권한이 필요합니다:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
MMS는 SMS보다 복잡한 처리 과정을 거칩니다. MMS 메시지가 수신되면 WAP 푸시 메시지 형태로 전달되며, 이를 처리하기 위해 특정 브로드캐스트 액션을 사용합니다.
android.provider.Telephony.WAP_PUSH_RECEIVEDAndroidManifest.xml에 등록해야 합니다. MIME 타입 필터가 필요합니다.```xml
<receiver android:name=".MMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
```WAP_PUSH_RECEIVED 브로드캐스트를 통해 수신되며, 데이터베이스에 저장된 MMS를 Content Resolver로 읽어와야 합니다.```java
@Override
public void onReceive(Context context, Intent intent) {
if ("android.provider.Telephony.WAP_PUSH_RECEIVED".equals(intent.getAction())) {
String mimeType = intent.getType();
if ("application/vnd.wap.mms-message".equals(mimeType)) {
// MMS 데이터를 Content Resolver를 통해 처리
parseMmsData(context);
}
}
}
private void parseMmsData(Context context) {
Uri uri = Uri.parse("content://mms");
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
String id = cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Mms._ID));
String body = getMmsBody(context, id);
Log.d("MMSReceiver", "MMS Body: " + body);
} while (cursor.moveToNext());
cursor.close();
}
}
```MMS는 content://mms/ URI를 통해 Android 데이터베이스에 저장됩니다.
content://mms/inboxcontent://mms/sentMMS는 하나의 메시지가 여러 파트(본문, 첨부 파일)로 구성되므로, 각 파트를 content://mms/part에서 읽어야 합니다.
MMS 처리를 위해 아래 권한이 필요합니다:
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
| 항목 | SMS | MMS |
|---|---|---|
| 브로드캐스트 액션 | Telephony.SMS_RECEIVED | Telephony.WAP_PUSH_RECEIVED |
| 데이터 형식 | PDU (Protocol Data Unit) | WAP 푸시 메시지 + 데이터베이스 참조 |
| 저장 위치 | content://sms/ | content://mms/ |
| 내용 구조 | 단일 텍스트 메시지 | 다중 파트(텍스트, 이미지, 첨부 파일) |
| 권한 | RECEIVE_SMS, READ_SMS | RECEIVE_MMS, READ_SMS, READ_PHONE_STATE |
MMS는 브로드캐스트를 수신했을 때 데이터가 완전히 저장되지 않았을 수 있으므로, 데이터를 읽기 전에 약간의 지연을 두거나, ContentObserver를 사용하여 새로운 MMS 저장 이벤트를 감지해야 합니다.
Android 4.4 (KitKat) 이상부터는 기본 SMS 앱만이 SMS/MMS 데이터를 수정하거나, 일부 중요한 API를 호출할 수 있습니다. 앱이 기본 SMS 앱이 아니면 읽기 전용 권한만 부여됩니다.
SMS는 PDU 형식을 디코딩해야 하며, MMS는 데이터베이스를 통해 각 파트를 읽어야 하는 차이가 있습니다.
ContentResolver로 조회할 수 있습니다.MMS가 SMS보다 저장하는 데 더 오래 걸리는 이유는 여러 가지 요소가 결합되어 있기 때문입니다. MMS는 SMS보다 더 복잡한 구조를 가지고 있으며, 여러 파트로 구성된 데이터를 처리하고 저장하는 과정이 포함됩니다. 이 과정이 SMS보다 느리게 처리되는 주된 이유는 다음과 같습니다.
WAP_PUSH_RECEIVED는 안드로이드에서 사용되는 브로드캐스트 액션 중 하나로, WAP 푸시 메시지를 수신했을 때 발생합니다. WAP(Wireless Application Protocol) 푸시 메시지는 주로 특정 URL이나 간단한 정보를 전송하기 위해 사용되며, 주로 모바일 네트워크를 통해 전달됩니다.
이 액션은 주로 다음과 같은 경우에 발생합니다:
운영 체제가 WAP 푸시 메시지를 수신했을 때.
푸시 메시지에는 특정 서비스 제공자 또는 애플리케이션이 처리해야 할 데이터(예: URL, 알림 메시지 등)가 포함됩니다.
MMS 수신: MMS는 일반적으로 WAP 푸시 메시지 형식으로 수신됩니다. WAP 푸시 메시지는 데이터를 비동기적으로 수신하기 때문에, MMS 메시지가 완전히 다운로드되기 전까지는 이를 저장할 수 없습니다.
MMS 메시지가 수신되면 먼저 WAP 서버에서 파일을 다운로드해야 하며, 파일이 모두 다운로드된 후에 MMS 파트가 데이터베이스에 저장됩니다.
이 과정에서 서버와의 네트워크 통신이 필요하고, 데이터가 완전히 다운로드된 후에야 content://mms/part URI에 저장됩니다.
결과: MMS가 여러 파일을 포함하고 있으며, 네트워크 통신과 다운로드가 완료되어야 저장될 수 있기 때문에, SMS보다 처리 시간이 길어집니다.
content://mms/part URI에 저장될 때 파일을 복사하고, 디스크 I/O 작업을 수행해야 하므로 시간이 더 걸립니다.다운로드 중일 때는 MMS 데이터베이스에 임시로 저장된 상태일 수 있으며, 완전히 다운로드되고 파트가 모두 저장될 때까지 시간이 걸립니다.
결과: 메시지가 완전히 다운로드될 때까지 기다려야 하므로, 저장이 완료되기까지의 시간이 길어질 수 있습니다.
MMS가 SMS보다 저장하는 데 더 오랜 시간이 걸리는 이유는 다음과 같은 복합적인 요인 때문입니다:
이 모든 과정이 동시에 일어나기 때문에, MMS는 SMS보다 처리와 저장 시간이 더 길어집니다.