我正在研究需要打電話登錄服務器以供個人使用的android應用程序。我有廣播接收方爲此目的註冊,我能夠檢測到所有類型的電話及其詳細信息。但是,不可能檢測到準確的呼出時間,即我們可以檢測完成呼叫的完整OFFHOOK時間,這不是完全通話持續時間。因此,只有在撥出電話結束的情況下,我會嘗試從通話記錄歷史記錄中讀取記錄。我能夠從broadcastreceiver中讀取呼叫記錄歷史記錄,以便結束呼出,但我沒有在呼叫記錄條目中看到當前接收到的呼叫的條目。我可以在通話歷史記錄中查看所有以前的通話,但不能收到我收到廣播接收者的通話。我在我的代碼中使用了來自here的Gabe Sechan示例。我試着去閱讀最新通話記錄這樣outgoingcallended方法,在android broadcastreceiver中找不到新的通話記錄記錄
ContentResolver crs = globalContext.getContentResolver();
Cursor cr = getAllCallLogs(crs);
if(cr.moveToFirst()){
duration = cr.getString(cr
.getColumnIndex(android.provider.CallLog.Calls.DURATION));
callNumber = cr.getString(cr
.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
}
private Cursor getAllCallLogs(ContentResolver cr) {
// reading all data in descending order according to DATE
String strOrder = android.provider.CallLog.Calls.DATE + " DESC";
Uri callUri = Uri.parse("content://call_log/calls");
Cursor cur = cr.query(callUri, null, null, null, strOrder);
return cur;
}
但callNumber是以前的電話號碼,而不是爲了我收到broadcastreciver和同樣是持續的情況之一。 我知道,當我嘗試讀取通話記錄時,它不會更新,因此我該如何解決這個問題?我錯過了什麼?
的原因是相同的記錄還沒有在數據庫更新時,您收到的廣播。對於Praveen正確指出的你可以添加一個延遲,但我更願意添加一個內容觀察者而不是 – Ayaanp