我正在尝试接听我刚刚拨打/接听的电话。为此,我使用了 BroadcastReceiver 和 IntentServices。
它是这样发生的:
在我的 BroadcastReceiver 类中,我检查状态是否为OFFHOOK,如果是,我在SharedPreferences中设置标志,所以当状态变为IDLE时,我检查这个标志是否仍然true
,如果是,我调用IntentService进入CallLog * ContentProvider * 并像这样获取最新数据:
cursor = getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI, mCursorFields, null, null, android.provider.CallLog.Calls.DATE + " DESC");
cursor.moveToFirst();
cursor.getString(cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
...
到目前为止,它完美地发生了,唯一的问题是:
“它没有得到最新的条目。它得到下一个条目,即在此之前进行的调用。”
所以,如果我之前给“X”人打过电话,那么在CallLog中会注册这个对“X”人的电话。现在,如果我打电话给“Y”,而不是打电话给“Y”,而是打电话给“X”,这就是我之前的电话。
我不知道会发生什么。使用ContentObserver时它运行良好,但我认为使用BroadcastReceiver构建它会更有效。
任何的想法?
提前致谢。
只是关于使用 ContentObserver 的评论:
使用 ContentObserver 的问题是,如果我更改联系人的姓名,它会检测到 CallLog 中的更改,因为 CallLog 中具有旧名称的用户将更新为新名称,并且会发生更改并调用班上。为此,我需要进行验证,以检查它是否真的改变了,我认为这很烦人。