안녕하세요,
SMS 처리를 위해 BroadcastReceiver 를 사용하여 android.provider.Telephony.SMS_RECEIVED action을 처리하고 있습니다.
manifest에 receiver 등록도 했고, 권한 설정도 하고, 별도의 receiver 클래스로 만들기도 하였습니다.
문제는, emulator에서는 sms 도착시 제대로 onReceive 가 호출이 됩니다.
그런데, 실 기기에서 테스트해보려고 실 기기에 올려서 해봤는데 sms가 도착해도 onReceive가 호출이 되지 않네요.
사용하는 기기는 갤럭시 s3 (4.3)입니다.
사용한 코드는 아래와 같습니다.
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
public class SmsR extends BroadcastReceiver {
private static final String LOG_TAG = "SmsR";
private static final String ACTION ="android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
StringBuilder ab = new StringBuilder();
Log.i(LOG_TAG,"[SMSapp] onReceiveIntent: Received");
if (intent.getAction().equals(ACTION)){
Bundle bundle = intent.getExtras();
if (bundle !=null){
Object[] pdusObj = (Object[]) bundle.get("pdus");
if (pdusObj == null) { return; }
String txt_call = "";
String txt_content = "";
SmsMessage[] messages = new SmsMessage[pdusObj.length];
for (int i=0;i<pdusObj.length;i++){
messages[i] = SmsMessage.createFromPdu ((byte[])pdusObj[i]);
txt_call = messages[i].getDisplayOriginatingAddress();
txt_content = messages[i].getDisplayMessageBody();
ab.append("received compressed SMS\n FROM ");
ab.append(txt_call);
ab.append("--Message--");
ab.append(txt_content);
}
Intent i= new Intent(context, InputActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("txt_call", txt_call);
i.putExtra("txt_content", txt_content);
context.startActivity(i);
}
Log.i(LOG_TAG,"[SMSapp] onReceiveIntent: "+ ab);
Toast.makeText(context,ab.toString(),Toast.LENGTH_LONG).show();
}
}
}
manifest 에 추가된 내용은
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<application ~~~>
<receiver android:name=".SmsR">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
</application>
안드로이드 개발은 경험이 짧아 정확하게 무슨 문제가 있는건지 특정하기가 어렵네요. 특히나 emulator에서는 되는 데 실제 기기에서는 안되는 이유가 궁금합니다.
onReceive 이벤트가 발생하는 log 자체가 찍히질 않습니다.
답변 기다리고 있겠습니다.
감사합니다.