[ShowMeSms] 2. Add SmsReceiver class
Development2011. 1. 13. 10:28
“File > New > Class”를 선택하고 아래와 같이 구성한다.
SmsReceiver.java를 열어보면 아래와 같은 코드가 생성된 것을 볼 수 있다.
1: /**
2: * @project ShowMeSms
3: */
4: package diy.myapps.android;
5:
6: import android.content.BroadcastReceiver;
7: import android.content.Context;
8: import android.content.Intent;
9:
10: /**
11: * @author Chaotic21c
12: *
13: */
14: public class SmsReceiver extends BroadcastReceiver {
15: /* (non-Javadoc)
16: * @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent)
17: */
18: @Override
19: public void onReceive(Context context, Intent intent) {
20: // TODO Auto-generated method stub
21: }
22: }
현재, BroadcastReceiver를 extends하여 receiver를 구현하려고 한다. 이를 위해서는 먼저 permission과 intent-filter의 등록이 필요하다. AndroidManifest.xml에 아래의 내용을 추가해 준다.
1: <?xml version="1.0" encoding="utf-8"?>
2: <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3: package="diy.myapps.android"
4: android:versionCode="1"
5: android:versionName="1.0">
6:
7: <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
8:
9: <application android:icon="@drawable/icon" android:label="@string/app_name">
10: <activity android:name=".ShowMeSms"
11: android:label="@string/app_name">
12: <intent-filter>
13: <action android:name="android.intent.action.MAIN" />
14: <category android:name="android.intent.category.LAUNCHER" />
15: </intent-filter>
16: </activity>
17: <receiver android:name="SmsReceiver">
18: <intent-filter>
19: <action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
20: </intent-filter>
21: </receiver>
22: </application>
23: </manifest>
이것으로 ShowMeSms에서 sms를 수신하기 위한 아주 기본적인 조치는 끝났다.
이제, 실제 sms를 받았을 때 어떻게 처리할 지에 대한 구현을 해 보자.
다시 SmsReceiver class로 돌아가서 onReceive() method를 아래의 내용으로 채운다.
1: public void onReceive(Context context, Intent intent) {
2: Log.d(LOGTAG, "onReceive() received action = " + intent.getAction());
3:
4: Bundle bundle = intent.getExtras();
5: SmsMessage[] msg = null;
6: String content = "";
7: if (bundle != null)
8: {
9: Object[] pdus = (Object[]) bundle.get("pdus");
10: msg = new SmsMessage[pdus.length];
11: for (int i=0; i<msg.length; i++)
12: {
13: msg[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
14: content = "From: " + msg[i].getOriginatingAddress() + "\n";
15: content += "Message: " + msg[i].getMessageBody().toString();
16: }
17:
18: Toast.makeText(context, content, Toast.LENGTH_LONG).show();
19: }
20: }
모든 내용을 저장하고 bin 디렉토리 아래에 생성된 ShowMeSms.apk를 설치하여 테스트를 해 보자.
디자이어 HD에 adb install로 설치를 한 후 ddms로 메시지가 화면에 나타나는 것을 capture한 것이다.
Toast를 만지작 거리다가 "왜 duration은 LENGTH_SHORT하고 LENGTH_LONG 밖에 없을까?"라는 의구심이 들어 검색을 해 보았다.
이 궁금증에 대한 답이 여기에 있는 듯 하다.
'Development' 카테고리의 다른 글
슬립모드(Sleep mode)에서 깨어나 화면을 밝게 하기 (0) | 2011.01.13 |
---|---|
[ShowMeSms] 3. Wake up from the sleep mode & Epillogue (0) | 2011.01.13 |
[ShowMeSms] 1. Prologue & Create project (0) | 2011.01.13 |
ASUS P5LD2 메인보드에 E-IDE(PATA) 타입의 HDD에 XP를 설치하려면... (0) | 2011.01.13 |
"content://sms/inbox/" URI를 이용하여 저장된 sms messages 읽어 오기 (0) | 2011.01.11 |