Я пытаюсь получить звонок, который только что сделал / получил. Для этого я использую 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 со старым именем будет обновлен до нового имени, а
произойдет изменение и вызовите класс. Для этого мне нужно сделать
проверки, для проверки, действительно ли это изменилось, что я думаю, раздражает.