閱讀186 返回首頁    go 技術社區[雲棲]


Android ContentObserver監視未接電話,未讀短信

ContentObserver有點類似於BroadcastReceiver,當某類事件發生時進行調用.ContentObserver一般和係統或第三方程序提供的Provider一起使用.

當為某個URI注冊了ContentObserver後,對其進行操作後都會調用注冊的回調函數,以監視未接電話為例(未讀短信和未接電話類似,隻需將URI改為短信的URI就可以了):

// 注冊ContentObserver   
getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, false, new MissedCallContentObserver(this,    
  
new Handler()));   
  
// 當有call log時,就會對這個類進行回調   
public class MissedCallContentObserver extends ContentObserver {   
       
    private Context ctx;   
       
    private static final String TAG = "MissedCallContentObserver";   
       
    public MissedCallContentObserver(Context context, Handler handler) {   
        super(handler);   
        ctx = context;   
    }   
  
    @Override  
    public void onChange(boolean selfChange) {   
           
        Cursor csr = ctx.getContentResolver().query(Calls.CONTENT_URI, new String[] {Calls.NUMBER,    
  
Calls.TYPE, Calls.NEW}, null, null, Calls.DEFAULT_SORT_ORDER);   
           
        if (csr != null) {   
            if (csr.moveToFirst()) {   
                int type = csr.getInt(csr.getColumnIndex(Calls.TYPE));   
                switch (type) {   
                case Calls.MISSED_TYPE:   
                    Log.v(TAG, "missed type");   
                    if (csr.getInt(csr.getColumnIndex(Calls.NEW)) == 1) {   
                        Log.v(TAG, "you have a missed call");   
                    }   
                    break;   
                case Calls.INCOMING_TYPE:   
                    Log.v(TAG, "incoming type");   
                    break;   
                case Calls.OUTGOING_TYPE:   
                    Log.v(TAG, "outgoing type");   
                    break;   
                }   
            }   
            // release resource   
            csr.close();   
        }   
    }   
       
    @Override  
    public boolean deliverSelfNotifications() {   
        return super.deliverSelfNotifications();   
    }   
}  


最後更新:2017-04-03 05:40:23

  上一篇:go java中short s=s+1和s+=1的區別
  下一篇:go 10個步驟:你將成為iPhone遊戲開發者