После грязной прошивки моего OnePlus One (bacon) с CM12.1 на CM13 я постоянно получаю всплывающие окна с принудительным закрытием диалогов.
Unfortunately the process com.android.phone has stopped
Logcat заполнен трассировками стека следующим образом:
Shutting down VM
FATAL EXCEPTION: main
Process: com.android.phone, PID: 13148
java.lang.RuntimeException: Unable to get provider com.android.providers.telephony.TelephonyProvider: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.app.ActivityThread.installProvider(ActivityThread.java:5205)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4797)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4737)
at android.app.ActivityThread.-wrap1(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1424)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5466)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
at android.database.CursorWindow.nativeGetString(Native Method)
at android.database.CursorWindow.getString(CursorWindow.java:438)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
at com.android.providers.telephony.TelephonyProvider$DatabaseHelper.getStringValueFromCursor(TelephonyProvider.java:993)
at com.android.providers.telephony.TelephonyProvider$DatabaseHelper.copyPreservedApnsToNewTable(TelephonyProvider.java:905)
at com.android.providers.telephony.TelephonyProvider$DatabaseHelper.onUpgrade(TelephonyProvider.java:641)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:256)
at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
at com.android.providers.telephony.TelephonyProvider.onCreate(TelephonyProvider.java:1457)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1748)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1723)
at android.app.ActivityThread.installProvider(ActivityThread.java:5202)
... 10 more
Как только я каким-то образом избавился от постоянного всплывающего окна пользовательского интерфейса, кажется, что com.android.phone
он падает не менее 10 раз в секунду, переполняет logcat и делает практически невозможным использование телефона.
Есть ли надежда на исправление или только полный сброс?
Это произошло из-за изменения кода.
Как сказал Firelord, очистите данные для приложений. Это можно сделать следующим образом ( это также удалит вашу базу данных SMS / MMS, поэтому обязательно сделайте резервную копию заранее ):
adb shell
rm -fr /data/data/com.android.providers.telephony/
rm -fr /data/data/com.android.phone/
exit
Флаг -f предназначен для принудительного выполнения, а флаг -r означает рекурсивность.
TelephonyProvider: dbh.onUpgrade:+ db=SQLiteDatabase: /data/user/0/com.android.providers.telephony/databases/telephony.db oldV=1114120 newV=1376264
после удаления каталога данных и перезагрузки диалоги принудительного закрытия прекратились. Что было в базе? Я заметил, что все мои текстовые сообщения исчезли. Что-нибудь еще?У меня была такая же проблема при обновлении до CM13 с CM12.1. Вы можете решить эту проблему, не удаляя файлы базы данных и, следовательно, не теряя данные, как это предлагается в других ответах.
Виновником кажется сломанная база данных по коду обновления в TelephonyProvider CM. Столбец ppp_number
таблицы перевозчиков не существует, но код обновления предполагает, что он уже существует.
Я решил эту проблему, скопировав файл telephony.db на свой локальный компьютер с Linux и изменив версию базы данных на версию, 16 << 16 | 6 = 1048582
чтобы заставить код обновления добавить недостающие столбцы. Операторы ALTER TABLE
в связанном коде защищены блоками try-catch, поэтому не имеет значения, существуют ли уже некоторые из столбцов. Загрузите телефон в рекавери (например, TWRP), чтобы иметь привилегии adb root и избежать блокировок со средой выполнения Android, которая постоянно пытается запустить провайдера телефонии.
% adb pull /data/user/0/com.android.providers.telephony/databases/telephony.db
% adb pull /data/user/0/com.android.providers.telephony/databases/telephony.db-journal
Создание резервных копий
% cp telephony.db telephony.db.bak
% cp telephony.db-journal telephony.db-journal.bak
Затем откройте базу данных с помощью sqlite и установите версию
% sqlite3 telephony.db
sqlite> PRAGMA user_version = 1048582;
sqlite> .quit
Загрузите измененную базу данных обратно на устройство и исправьте разрешения
% adb push telephony.db /data/user/0/com.android.providers.telephony/databases
% adb shell
~ # cd /data/user/0/com.android.providers.telephony/databases
/data/data/com.android.providers.telephony/databases # rm telephony.db-journal
/data/data/com.android.providers.telephony/databases # chown radio:radio telephony.db
/data/data/com.android.providers.telephony/databases # chmod 660 telephony.db
Вы также можете попробовать это на сломанной системе, чего я бы не рекомендовал. Вам, вероятно, придется стать пользователем root adb root
, чтобы копировать и изменять файлы с расширением adb
.
*.db*
файлов решило проблему.$ sqlite3 telephony.db VACUUM
Я попробовал решение Себастьяна, но ошибка осталась. Принятый ответ приводит к потере всех ваших SMS, поэтому для меня это не вариант. Однако после загрузки в режим восстановления и удаления файлов
/data/data/com.android.providers.telephony/databases/telephony.db
/data/data/com.android.providers.telephony/databases/telephony.db-journal
телефон снова работал отлично. Похоже, что файлы содержат только автоматически сгенерированные данные, поэтому их можно безопасно удалить.
Если вы не можете войти в оболочку adb или удалить каталог со своего телефона, потому что он непригоден для использования, вы также можете удалить каталог из восстановления TWRP.
Была такая же поблема после обновления с СМ12 на СМ13. Вот как я смог это исправить:
Я удалил эти два каталога
/data/user/0/com.android.providers.telephony
/data/data/com.android.phone/
полностью с моего телефона (Nexus 5). Раньше ES Explorer
я так делал, мне нужно было включить Root Mode
и Show Hidden Files
иметь возможность удалять файлы в этом каталоге.
Журнал вызовов и SMS все еще там, не вижу никаких недостатков, связанных с удалением этих каталогов. Кажется, все снова работает гладко.
Повелитель огня
com.android.providers.telephony
(приложение обозначается как «Телефон/хранилище телефонии/провайдеры»). Пока вы это делаете, сделайте это и для приложения «Телефон» (com.android.phone
), перезапустите и сообщите нам результаты. Похоже, что база данныхcom.android.providers.telephony
не может быть прочитана. Возможно, вы не сможете очистить данные для этих приложений. В этом случае удалите их каталоги /data/data с лица земли.Анкуш
Никон