首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

安全卫士第四天-23黑名单阻截

2013-01-21 
安全卫士第四天--23黑名单拦截case TelephonyManager.CALL_STATE_RINGING: // 零响状态firstRingTime Sy

安全卫士第四天--23黑名单拦截

   case TelephonyManager.CALL_STATE_RINGING: // 零响状态
    firstRingTime = System.currentTimeMillis();
    Log.i(TAG,"来电号码为"+ incomingNumber);
    // 判断incomingnumber是否在黑名单中
    if(dao.find(incomingNumber)){
     //挂断电话
     endCall();
     
     //deleteCallLog(incomingNumber);\
     //不能立即删除通话记录,因为这个记录是挂断后一段时间才生成,可以用线程过几秒钟去执行删除,但体验效果不好,用下面的方式
     //注册一个内容观察者 观察call_log的uri的信息
     
     getContentResolver().registerContentObserver(CallLog.Calls.CONTENT_URI, true, new MyObserver(new Handler(),incomingNumber));
     
    }

 


 /**
  * 根据电话号码删除呼叫记录
  * @param incomingNumber 要删除呼叫记录的号码
  */
 public void deleteCallLog(String incomingNumber) {
  ContentResolver  resolver = getContentResolver();
  Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI, null, "number=?", new String[]{incomingNumber}, null);
  if(cursor.moveToFirst()){//查询到了呼叫记录
   String id =cursor.getString(cursor.getColumnIndex("_id"));
   resolver.delete(CallLog.Calls.CONTENT_URI, "_id=?",new String[]{id});
  }
 }

 public void endCall() {
  try {
   Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
   IBinder binder = (IBinder)method.invoke(null, new Object[]{TELEPHONY_SERVICE});
   ITelephony telephony = ITelephony.Stub.asInterface(binder);
   telephony.endCall();
  } catch (Exception e) {
   e.printStackTrace();
  }

 }

 

 

 
 private class MyObserver extends ContentObserver
 {
  private String incomingnumber;
  public MyObserver(Handler handler,String incomingnumber) {
   super(handler);
   this.incomingnumber = incomingnumber;
  }

  @Override
  public void onChange(boolean selfChange) {
   super.onChange(selfChange);
   deleteCallLog(incomingnumber);
   
   //当删除了呼叫记录后 反注册内容观察者
   getContentResolver().unregisterContentObserver(this);
  }
  
 }

 

热点排行