2011-05-06 41 views

回答

8

1.创建观察员:

class CustomContentObserver extends ContentObserver { 

     public CustomContentObserver(Handler handler) { 
      super(handler); 

     } 

     @Override public boolean deliverSelfNotifications() { 
      return false; 
     } 

     public void logCallLog() { 
      long dialed; 
      String columns[]=new String[] { 
        CallLog.Calls._ID, 
        CallLog.Calls.NUMBER, 
        CallLog.Calls.DATE, 
        CallLog.Calls.DURATION, 
        CallLog.Calls.TYPE}; 
      Cursor c; 
      c = getContentResolver().query(Uri.parse("content://call_log/calls"), 
        columns, null, null, "Calls._ID DESC"); //last record first 
      while (c.moveToNext()) { 
       dialed=c.getLong(c.getColumnIndex(CallLog.Calls.DATE));     
       Log.i("CallLog","type: " + c.getString(4) + "Call to number: "+number+", registered at: "+new Date(dialed).toString()); 
      } 
     } 

     public void onChange(boolean selfChange) { 
      super.onChange(selfChange); 
      Log.d("PhoneService", "StringsContentObserver.onChange(" + selfChange + ")"); 
      logCallLog(); 
     } 

} 

2.注册观察员:

Uri mediaUri = android.provider.CallLog.Calls.CONTENT_URI; 
     Log.d("PhoneService", "The Encoded path of the media Uri is " 
       + mediaUri.getEncodedPath()); 
     CustomContentObserver custObser = new CustomContentObserver(handler); 
     imageContentRsr.registerContentObserver(mediaUri, false, custObser); 

编辑: 作为杰利贝恩(4.1),你现在需要两个许可

<uses-permission android:name="android.permission.READ_CALL_LOG" /> 

为此工作,而不是抛出权限拒绝异常

+0

什么类型的对象是imagecontentRsr? – 2012-10-26 22:38:58

+0

尝试getContentResolver() – alezhka 2012-10-29 09:04:20

+1

谢谢我已经尝试使用getContentResolver()并且可以工作,但在ContentObserver类之外。在这个类下它说getContentReseolver是未定义的。 – 2012-10-29 13:20:14