안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요. 고수님들의 조언 기다립니다.
질문 : sms 송신 이벤트 발생을 알고 싶습니다.
수신은 브로드캐스트 리스버를 이용해서 알 수있습니다만, outgoing 의 경우는 잘 모르겠어서요.
검색 해보니까 ContentObserver 를 이용하면 DB의 변화를 알 수 있다고 해서 테스트 해봤는데 잘 안되네요.
private ContentObserver observer = null;
private final Uri inboxUri = Uri.parse("content://sms");
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
test();
}
private void test() {
observer = new SMSObserver();
getContentResolver().registerContentObserver(inboxUri, Boolean.FALSE, observer);
}
class SMSObserver extends ContentObserver {
public SMSObserver() {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
Log.d("test_woori", "call onChange");
}
}
public void onDestroy(){
super.onDestroy();
getContentResolver().unregisterContentObserver(observer);
}
이렇게 했습니다.
uri에 주소록 주소를 넣어서 삽입 테스트 해보면 Log가 잘 찍히는데(=onChange가 구동된다.)
uri에 Uri.parse("content://sms"); Uri.parse("content://sms/inbox"); 를 넣으면 onChange가 구동이 안되네요.
혹시 좋은 방법 없을까요?
질문 : sms 송신 이벤트 발생을 알고 싶습니다.
수신은 브로드캐스트 리스버를 이용해서 알 수있습니다만, outgoing 의 경우는 잘 모르겠어서요.
검색 해보니까 ContentObserver 를 이용하면 DB의 변화를 알 수 있다고 해서 테스트 해봤는데 잘 안되네요.
private ContentObserver observer = null;
private final Uri inboxUri = Uri.parse("content://sms");
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
test();
}
private void test() {
observer = new SMSObserver();
getContentResolver().registerContentObserver(inboxUri, Boolean.FALSE, observer);
}
class SMSObserver extends ContentObserver {
public SMSObserver() {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
Log.d("test_woori", "call onChange");
}
}
public void onDestroy(){
super.onDestroy();
getContentResolver().unregisterContentObserver(observer);
}
이렇게 했습니다.
uri에 주소록 주소를 넣어서 삽입 테스트 해보면 Log가 잘 찍히는데(=onChange가 구동된다.)
uri에 Uri.parse("content://sms"); Uri.parse("content://sms/inbox"); 를 넣으면 onChange가 구동이 안되네요.
혹시 좋은 방법 없을까요?




content://sms => content://sms/
observer = new SMSObserver(); => observer = new SMSObserver(new Handler);
public SMSObserver() { => public SMSObserver(Handler handler) {
super(new Handler());
}
이렇게 하니까 되네요.