2013-01-21 65 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){}