sms 발신 이벤트 질문입니다.
기존의 sms 이벤트 관련 질의 응답을 검색하였으나 만족하는 답을 얻지 못하여 질문을 올립니다.
제가 알고 있던 상식으론 sms 발신,수신은
BroadcastReceiver 를 사용하여 이벤트가 발생할 때 감지할 수 있을 것이라 생각했는데
실제로 코드를 작성해보니 수신되는 sms 만 감지가 되고 발신되는 action 은 그냥 흘려 버리 더군요..
intent.getAction(); 을 로그로 찍어보아도 수신 될때는 android.provider.Telephony.SMS_RECEIVED 가 찍히는데
발신 할 경우에는 아무런 동작을 감지 못하네요..
관련되어 아시는분은 약간의 조언을 부탁드립니다.
퍼미션은
.SMS_RECEIVED,
.SEND_SMS,
.READ_SMS
를 추가 한 상태입니다.
public class SmsReceiver extends BroadcastReceiver{
/** Called when the activity is first created. */
public static int MSG_TPE=0;
public void onReceive(Context context, Intent intent){
String MSG_TYPE=intent.getAction();
if(MSG_TYPE.equals("android.provider.Telephony.SMS_RECEIVED")){
Bundle bundle = intent.getExtras();
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++){
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}
Toast toast = Toast.makeText(context,"BLOCKED Received SMS: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG);
toast.show();
abortBroadcast();
System.out.println("Blocking SMS_RECEIVED");
}else if(MSG_TYPE.equals("android.provider.Telephony.SEND_SMS")){
Toast toast = Toast.makeText(context,"SMS SENT: "+MSG_TYPE , Toast.LENGTH_LONG);
toast.show();
abortBroadcast();
System.out.println("Blocking SMS SEND_SMS");
}else{
Toast toast = Toast.makeText(context,"SIN ELSE: "+MSG_TYPE , Toast.LENGTH_LONG);
toast.show();
abortBroadcast();
System.out.println("Blocking");
}
}
}
제 기억으로는 발신의 경우 특별히 Broadcast 되는 Intent가 없었던 것으로 기억합니다.
SMS쪽 ContentProvider에 Observer를 설정하여 발신 메시지가 DB에 추가되는 순간을 확인하시면 발신 이벤트를 잡는것과 비슷하게 동작하실 수 있을겁니다.