2012-02-24 102 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); 
      } 
     }); 
    } 

但是這種方法有一些缺陷。在我看來,根本不應該使用:-)