기본 메시징 앱에서 보낸 SMS를 수신 대기하는 앱을 작성했습니다.Android : ContentObserver가 더 많은 횟수 실행
다음 코드를 사용하면 전송 된 SMS에 대해 앱이 실행되지 않았습니다.
SMSSentObserver smsSentObserver = new SMSSentObserver(null, this);
ContentResolver contentResolver = this.getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms/sent"), true, smsSentObserver);
다음 코드를 사용하면 ContentObserver가 트리거됩니다.
SMSSentObserver smsSentObserver = new SMSSentObserver(null, this);
ContentResolver contentResolver = this.getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"), true, smsSentObserver);
내가 보낸 SMS를 수신 할 수 있었지만 SMSSentObserver는에서 onCreate() 메소드를 한 번 이상 호출 (ContentObserver를 구현). 그런 다음 코드에 조건을 추가하여 보낸 SMS 이벤트를 확인했습니다. 그러나 조건은 두 가지 사건에 의해 통과된다.
public class SMSSentObserver extends ContentObserver {
private final Context _context;
public SMSSentObserver(Handler handler, Context context) {
super(null);
_context = context;
}
@Override
public void onChange(boolean selfChange) {
saveSentSMS();
super.onChange(selfChange);
}
private void saveSentSMS() {
Uri uriSMSURI = Uri.parse("content://sms/sent");
Cursor cur = this._context.getContentResolver().query(uriSMSURI, null, null, null, null);
if(null == cur) {
return;
}
if(cur.moveToFirst()) {
String strProtocol = cur.getString(cur.getColumnIndex("protocol"));
if(null != strProtocol) { //for sent messages protocol will be null.
return;
}
int type = cur.getInt(cur.getColumnIndex("type"));
if(type == 2) {
String strSMSBody = cur.getString(cur.getColumnIndex("body"));
String strPhoneNo = cur.getString(cur.getColumnIndex("address"));
long smsDateTime = cur.getLong(cur.getColumnIndex("date"));
String serviceCenter = cur.getString(cur.getColumnIndex("service_center"));
String strStatus = cur.getString(cur.getColumnIndex("status"));
String strPerson = cur.getString(cur.getColumnIndex("person"));
Log.e("Info", "SMS saved");
}
}
}
}
"SMS saved"는 catlog에 두 번 표시되는 것이 아니라 한 번에 catlog에 두 번 표시됩니다. 다른 사람이 보낸 SMS를 찾을 수있는 방법이 있습니까?
도움이 필요하십니까?