현재 개발하고 있는 어플의 기능 중에 폰에 SMS가 도착하면 문자의 내용에 따라 알림 bar에 notification을 발생하는 기능을 구현중입니다.

에뮬레이터에서 앱을 구동하고 DDMS를 사용해서 문자를 보냈는데 다음 Permission 에러가 뜹니다.

에뮬레이터  타겟은 2.2입니다.



Permission Denial: broadcasting Intent { act=android.provider.Telephony.SMS_RECEIVED (has extras) } from com.android.phone (pid=113, uid=1001) requires android.permission.RECEIVE_SMS due to receiver com.mkmtc/com.mkmtc.NotifSmsReceiver


BroadcastReceiver를 상속하는 NotifSmsReceiver를 만들었고, 내용은 다음과 같습니다.


public class NotifSmsReceiver extends BroadcastReceiver {


private final String tag = getClass().getSimpleName();


@Override

public void onReceive(Context context, Intent intent) {

// TODO Auto-generated method stub


Log.i(tag, "sms received");

}

}


일단은 onReceive 할때 로그 만 찍도록 해놓았습니다. 메시지 내용을 파악하는 상세 루틴은 밑에 들어갈 거구요.

Mainfest에 Receiver 등록하고 Permission도 설정했습니다.


- Manifest 파일

...

...

     <receiver android:name=".NotifSmsReceiver" >

            <intent-filter >

                <action android:name="android.provider.Telephony.SMS_RECEIVED" />

            </intent-filter>

        </receiver>


...
...

    <uses-permission android:name="android.permission.RECEIVE_SMS" >
    </uses-permission>
    <uses-permission android:name="android.permission.READ_SMS" >
    </uses-permission>

</manifest>

구글링 해보니까 permission 태그의 위치가 중요한것 같은데,
permission 태그도 receiver 밑이 아니라 manifest 바로 밑으로 들어가도록 했습니다. 

DDMS에서 문자 발송하면 저 위의 에러 메시지가 뜨네요..... 도대체 뭐가 잘못된건지...;;
혹시 에뮬레이터에서는 sms 이벤트 캐치가 불가능한건지요.....
고수님들 답변 기다리겠습니다^^