栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

通话结束后从通话记录中删除通话

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通话结束后从通话记录中删除通话

我无论如何都使用4.2.2,我不得不修改aftab的代码,因为它对我不起作用。给出我想做的事情可能是一个麻烦的问题,即在传入呼叫结束后立即更新呼叫日志。我认为我必须给操作系统足够的时间来更新表,然后再删除条目,否则它将不存在:

private void deleteNumber(String phoneNumber) {    try {        Thread.sleep(4000);        String strNumberOne[] = { phoneNumber };        Cursor cursor = context.getContentResolver().query(     CallLog.Calls.CONTENT_URI, null,     CallLog.Calls.NUMBER + " = ? ", strNumberOne, "");        boolean bol = cursor.moveToFirst();        if (bol) { do {     int idOfRowToDelete = cursor.getInt(cursor  .getColumnIndex(CallLog.Calls._ID));     context.getContentResolver().delete(  CallLog.Calls.CONTENT_URI,  CallLog.Calls._ID + "= ? ",  new String[] { String.valueOf(idOfRowToDelete) }); } while (cursor.moveTonext());        }    } catch (Exception ex) {        Log.v("deleteNumber",     "Exception, unable to remove # from call log: "  + ex.toString());    }}

并调用我在另一个线程上运行的函数(因为我正在睡觉):

  new Thread() { public void run() {deleteNumber(incomingNumber);    }}.start();

添加睡眠后,在通话结束后立即尝试删除时,似乎可以使用。

更新:意识到最后一条评论之后,我们可以在android提供程序调用日志uri上设置contentobserver:

public class BlockerContentObserver extends ContentObserver{private Context context;private String phoneNumber;public void setPhoneNumber(String phoneNumber) {    this.phoneNumber = phoneNumber;}public BlockerContentObserver(Handler handler,Context context) {    super(handler);this.context=context;} @Override    public boolean deliverSelfNotifications() {        return true;    }@Overridepublic void onChange(boolean selfChange) {    // TODO Auto-generated method stub    super.onChange(selfChange);    Log.v(Consts.TAG,"has call log changed:"+selfChange);    deleteNumber(phoneNumber);}   private void deleteNumber(String phoneNumber) {    try {        String strNumberOne[] = { phoneNumber };        Cursor cursor = context.getContentResolver().query(     CallLog.Calls.CONTENT_URI, null,     CallLog.Calls.NUMBER + " = ? ", strNumberOne, "");        boolean bol = cursor.moveToFirst();        if (bol) { do {     int idOfRowToDelete = cursor.getInt(cursor  .getColumnIndex(CallLog.Calls._ID));     context.getContentResolver().delete(  CallLog.Calls.CONTENT_URI,  CallLog.Calls._ID + "= ? ",  new String[] { String.valueOf(idOfRowToDelete) }); } while (cursor.moveTonext());        }    } catch (Exception ex) {        Log.v(Consts.TAG,     "Exception, unable to remove # from call log: "  + ex.toString());    }}}

现在,我们使用以下方法注册以监听呼叫日志数据库中的更改:

mContentObserver = new BlockerContentObserver(new Handler(),context);

然后我们创建一个方法来注册事件或取消注册:

private void RegisterContentObserver(boolean shouldRegister){    if(shouldRegister)    {        context.getContentResolver().registerContentObserver(     android.provider.CallLog.Calls.CONTENT_URI,     true,     mContentObserver);    }else {    try {          context.getContentResolver().unregisterContentObserver(mContentObserver);      } catch (IllegalStateException ise) {          // Do Nothing.  Observer has already been unregistered.      }  }    }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/394870.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号