Иногда возникает ошибка при мониторинге состояния вызовов на моих телефонах Android (Samsung Galaxy S6-8; OS: Android 6-8) с использованием вывода RILJ в adb logcat, и я не знаю, откуда это может прийти.
Что я делаю:
- Считайте выходные данные adb logcat через "logcat -b main -v long" и "logcat -b radio -v long"
- Сопоставьте каждую строку журнала, используя фильтр регулярных выражений "
- , чтобы сопоставить каждую строку с ее состоянием: НАБОР, ПРЕДУПРЕЖДЕНИЕ, АКТИВНЫЙ, ВХОДЯЩИЙ, ЗАДЕРЖКА, ОЖИДАНИЕ
Результат:
Кажется, это работает хорошо, вот пример выходных данных для вызова между A- и B-стороной:
A-Party 02-18 14:57:00.796: D/RILJ(4544): [0899]> GET_CURRENT_CALLS [SUB0]
A-Party 02-18 14:57:00.804: D/RILJ(4544): [0899]< GET_CURRENT_CALLS {[id=1,DIALING,toa=129,norm,mo,0,voc,noevp,,cli=1,,1] } [SUB0]
B-Party 02-18 14:57:42.956: D/RILJ(4494): [1856]> GET_CURRENT_CALLS [SUB0]
B-Party 02-18 14:57:42.963: D/RILJ(4494): [1856]< GET_CURRENT_CALLS {[id=1,INCOMING,toa=145,norm,mt,0,voc,noevp,,cli=1,,1] } [SUB0]
A-Party 02-18 14:57:02.869: D/RILJ(4544): [0902]> GET_CURRENT_CALLS [SUB0]
A-Party 02-18 14:57:02.870: D/RILJ(4544): [0903]> GET_CURRENT_CALLS [SUB0]
A-Party 02-18 14:57:02.873: D/RILJ(4544): [0902]< GET_CURRENT_CALLS {[id=1,ALERTING,toa=129,norm,mo,0,voc,noevp,,cli=1,,1] } [SUB0]
A-Party 02-18 14:57:02.879: D/RILJ(4544): [0903]< GET_CURRENT_CALLS {[id=1,ALERTING,toa=129,norm,mo,0,voc,noevp,,cli=1,,1] } [SUB0]
A-Party 02-18 14:57:02.909: D/RILJ(4544): [0904]> GET_CURRENT_CALLS [SUB0]
A-Party 02-18 14:57:02.917: D/RILJ(4544): [0904]< GET_CURRENT_CALLS {[id=1,ALERTING,toa=129,norm,mo,0,voc,noevp,,cli=1,,1] } [SUB0]
B-Party 02-18 14:57:59.539: D/RILJ(4494): [1862]> GET_CURRENT_CALLS [SUB0]
A-Party 02-18 14:57:18.988: D/RILJ(4544): [0906]> GET_CURRENT_CALLS [SUB0]
B-Party 02-18 14:57:59.545: D/RILJ(4494): [1862]< GET_CURRENT_CALLS {[id=1,ACTIVE,toa=145,norm,mt,0,voc,noevp,,cli=1,,1] } [SUB0]
A-Party 02-18 14:57:18.999: D/RILJ(4544): [0906]< GET_CURRENT_CALLS {[id=1,ACTIVE,toa=129,norm,mo,0,voc,noevp,,cli=1,,1] } [SUB0]
B-Party 02-18 14:58:31.225: D/RILJ(4494): [1865]> GET_CURRENT_CALLS [SUB0]
B-Party 02-18 14:58:31.251: D/RILJ(4494): [1865]< GET_CURRENT_CALLS {} [SUB0]
A-Party 02-18 14:57:55.350: D/RILJ(4544): [0909]> GET_CURRENT_CALLS [SUB0]
A-Party 02-18 14:57:55.363: D/RILJ(4544): [0909]< GET_CURRENT_CALLS {} [SUB0]
A-Party 02-18 14:58:27.693: D/RILJ(4544): [0924]> GET_CURRENT_CALLS [SUB0]
Проблема:
В некоторых случаях кажется, что отсутствуют сообщения журнала.Может случиться так, что строка
A-Party 02-18 14:57:18.999: D/RILJ(4544): [0906]< GET_CURRENT_CALLS {[id=1,ACTIVE,toa=129,norm,mo,0,voc,noevp,,cli=1,,1] } [SUB0]
отсутствует.Таким образом, состояние вызова ACTIVE не зарегистрировано, хотя на экране моего телефона я вижу, что на вызов ответили, и он действительно активен.
Я пытаюсь сделать его более стабильным в течение некоторого времени, но у меня естьне знаю, в чем проблема.Я уже подумал / попробовал следующее, но не знаю в деталях, может ли это быть причиной этого:
- Может ли это быть "ошибкой" в RILJ из-за отсутствия лог-линии, илиЭто на 100% надежно?
- Есть ли еще один более надежный сервис / возможность отслеживать состояния вызовов?Кажется, что телефон правильно знает состояние, даже если журнал RILJ отсутствует, поэтому он должен каким-то образом узнать из другого источника.
- Может ли быть проблема adb logcat, что некоторые сообщения просто теряются?
Я исхожу из идей и был бы очень благодарен, если у кого-то есть какие-либо ответы или другие подсказки, чтобы исправить эту проблему и обеспечить 100% надежное отслеживание состояния вызова.
Спасибо
Редактировать:
Я несколько раз видел использование процессора на 100%, возможно ли, что журналы adb "теряются" из-за производительности процессора, или я могу быть уверен, что журналыПолучено полностью, когда использование становится ниже?