2013-01-21 80 views
0

我開始是在SMS inbox像這樣ContentObserver短信收件箱不工作

smsObserver = new SmsObserver(new Handler()); 
getContentResolver().registerContentObserver(Uri.parse("content://sms/inbox"), true, smsObserver); 

這裏是一流的,我只是想知道,當一個變化是對供應商提出註冊ContentObserver一個服務,但我不明白回調到onChange方法

private class SmsObserver extends ContentObserver{ 

    public SmsObserver(Handler handler) { 
     super(handler); 
    } 

    @Override 
    public void onChange(boolean selfChange){ 
     super.onChange(selfChange); 
     Cursor c = getContentResolver().query(Uri.parse("content://sms/inbox"), 
       new String[] {"thread_id"},"address" + "=" + from,null,null); 
     if(c != null && c.moveToLast()){ 
      long id = c.getLong(0); 
      Log.d("ID", c.getString(0)); 
     } 
     c.close(); 
    } 
} 

我也註冊一個觀察員烏里content://mms-sms/conversations和一個作品,我只是抄我怎麼做的一切都是從這個交給SmsObserver類,所以我不KN流什麼是錯,我不能設置在content://sms/inbox觀察員?

回答

0

嘗試使用廣播接收器。 是必要的登記廣播。請參閱:Problem with SMS Broadcast receiver

+0

我有當一個新的SMS來在火災廣播接收器,但我需要看到,當消息被放入提供商,這不馬上 – tyczj

+0

+1 tyczj發生,沒有現有意圖發送短信/彩信,所以我們不能用BroadcastReceiver來捕捉它們。我們被迫使用將被變更通知觀察員(包括已接收/發送SMS/MMS) – Alex

0

如果使用brodcast接收器,短信放在當brodcast結束分貝。這意味着你需要火BG線程睡覺它痘痘的時間,然後將短信以dB爲單位顯示

1

- 首先,註冊您的ContentObserver這樣的:

getContentResolver().registerContentObserver(Uri.parse("content://mms-sms/inbox"), true, smsObserver); 

- 然後,覆蓋下面的方法在你的ContentObserver

@Override  
public void onChange(boolean selfChange, Uri uri){}