2012-02-24 100 views
0

在黑莓6.0,我用下面的代码删除所有通话记录:黑莓:PhoneLogs.deleteCall()不工作

PhoneLogs logs = PhoneLogs.getInstance(); 

    int lenNormal = logs.numberOfCalls(PhoneLogs.FOLDER_NORMAL_CALLS); 
    for (int i = 0; i < lenNormal; i++) { 
      logs.deleteCall(i, PhoneLogs.FOLDER_NORMAL_CALLS); 
    } 

    int lenMissed = logs.numberOfCalls(PhoneLogs.FOLDER_MISSED_CALLS); 
    for (int i = 0; i < lenMissed; i++) { 
     logs.deleteCall(i, PhoneLogs.FOLDER_MISSED_CALLS); 
    } 

    int total = lenNormal + lenMissed; 
    Dialog.alert("Deleted: " + total); 

对话框说,他们已经删除了N多的通话记录,但我仍然可以看到电话中的通话记录。程序运行平稳无任何例外。

谷歌搜索说:(1)重新启动手机,(2)如果您在PhoneLogListener内部删除,引入一些延迟。我也尝试过这些选项。但没有运气!

在此先感谢您的帮助。

回答

0

这是一个已知的bug,使用以下方法无法删除呼叫日志条目:PhoneLogs.deleteCall()。在这里看到:http://supportforums.blackberry.com/t5/Java-Development/Unable-to-delete-phone-logs/m-p/1587315

作为一个骇客解决方案,你可以使用输入模拟。例如:

private void deleteLatestCallLog() { 
     UiApplication.getUiApplication().invokeAndWait(new Runnable() { 
      public void run() { 
       Invoke.invokeApplication(Invoke.APP_TYPE_PHONE, 
         new PhoneArguments()); 
      } 
     }); 

     UiApplication.getUiApplication().invokeAndWait(new Runnable() { 
      public void run() { 
       injectKeyEvent(Keypad.KEY_BACKSPACE); 
      } 
     }); 

     UiApplication.getUiApplication().invokeAndWait(new Runnable() { 
      public void run() { 
       injectKeyEvent(Keypad.KEY_ENTER); 
      } 
     }); 

     UiApplication.getUiApplication().invokeAndWait(new Runnable() { 
      public void run() { 
       injectKeyEvent(Keypad.KEY_ESCAPE); 
      } 
     }); 
    } 

但是这种方法有一些缺陷。在我看来,根本不应该使用:-)