Después de mostrar suciamente mi OnePlus One (tocino) de CM12.1 a CM13, recibo constantemente ventanas emergentes de diálogo de cierre forzado
Unfortunately the process com.android.phone has stopped
Logcat está lleno de stacktraces como este:
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
Una vez que de alguna manera me deshago de la ventana emergente persistente de la interfaz de usuario, parece que com.android.phone
se bloquea al menos 10 veces por segundo, inunda logcat y hace que sea casi imposible usar el teléfono.
¿Hay alguna esperanza de una solución, o es un restablecimiento completo la única opción?
Esto fue debido a un cambio en el código.
Como ha dicho Firelord, borre los datos de las aplicaciones. Esto se puede hacer así ( esto también eliminará su base de datos de SMS/MMS, así que asegúrese de hacer una copia de seguridad de ellos de antemano ):
adb shell
rm -fr /data/data/com.android.providers.telephony/
rm -fr /data/data/com.android.phone/
exit
El indicador -f es para fuerza y el indicador -r significa recursivo.
TelephonyProvider: dbh.onUpgrade:+ db=SQLiteDatabase: /data/user/0/com.android.providers.telephony/databases/telephony.db oldV=1114120 newV=1376264
después de eliminar el directorio de datos y reiniciar, los diálogos de cierre forzado se detuvieron. ¿Qué había en la base de datos? Me di cuenta de que todos mis mensajes de texto se han ido. ¿Algo más?Tuve el mismo problema al actualizar a CM13 desde CM12.1. Puede resolver este problema sin eliminar los archivos de su base de datos y, por lo tanto, perder datos como se sugiere en las otras respuestas.
El culpable parece ser una base de datos rota en el código de actualización en TelephonyProvider de CM. La ppp_number
columna de la tabla de transportistas no existe, pero el código de actualización asume que ya existe.
Lo resolví copiando telephony.db en mi máquina Linux local y revirtiendo la versión de la base de datos a la versión 16 << 16 | 6 = 1048582
para forzar el código de actualización para agregar las columnas faltantes. Las ALTER TABLE
sentencias en el código vinculado están protegidas por bloques try-catch, por lo que no importa si algunas de las columnas ya existen. Inicie el teléfono en modo de recuperación (p. ej., TWRP) para tener privilegios de root adb y evitar carreras de bloqueo con Android Runtime, que intenta constantemente iniciar el proveedor de telefonía.
% 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
Crear copias de seguridad
% cp telephony.db telephony.db.bak
% cp telephony.db-journal telephony.db-journal.bak
Luego abra la base de datos con sqlite y configure la versión
% sqlite3 telephony.db
sqlite> PRAGMA user_version = 1048582;
sqlite> .quit
Vuelva a cargar la base de datos modificada en el dispositivo y corrija los permisos
% 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
También podría probar esto en el sistema roto, lo cual no recomendaría. Probablemente tendría que volverse root con el adb root
fin de copiar y modificar los archivos con adb
.
*.db*
archivos resolvió el problema.$ sqlite3 telephony.db VACUUM
Probé la solución de Sebastian, pero el error persistió. La respuesta aceptada da como resultado la pérdida de todos sus SMS, por lo tanto, no era una opción para mí. Sin embargo, después de iniciar el modo de recuperación y eliminar los archivos
/data/data/com.android.providers.telephony/databases/telephony.db
/data/data/com.android.providers.telephony/databases/telephony.db-journal
el telefono volvio a funcionar perfectamente. Los archivos parecen contener solo datos generados automáticamente, por lo que es seguro eliminarlos.
Si no puede acceder a un shell adb o eliminar el directorio de su teléfono porque no se puede utilizar, también puede eliminar el directorio de la recuperación TWRP.
Tuve el mismo problema después de actualizar de CM12 a CM13. Así es como pude arreglarlo:
Eliminé estos dos directorios.
/data/user/0/com.android.providers.telephony
/data/data/com.android.phone/
completamente desde mi teléfono (Nexus 5). Solía ES Explorer
hacerlo, tenía que encender Root Mode
y Show Hidden Files
poder eliminar archivos en ese directorio.
El registro de llamadas y los SMS todavía están allí, no puedo ver ninguna desventaja resultante de eliminar esos directorios. Todo parece funcionar sin problemas de nuevo.
Señor del Fuego
com.android.providers.telephony
(la aplicación se llama "Teléfono/almacenamiento de telefonía/proveedores"). Mientras lo hace, hágalo también para la aplicación Teléfono (com.android.phone
), reinicie y cuéntenos los resultados. Parece que la base de datos decom.android.providers.telephony
no se puede leer. Es posible que no pueda borrar los datos de esas aplicaciones. En ese caso, elimine sus directorios /data/data de la faz de la tierra.Ankush
Nickon