8 votos

"com.Android.phone se ha detenido" después de un flasheo sucio de CM13

Después de flashear suciamente mi OnePlus One (bacon) de CM12.1 a CM13, me aparecen constantemente diálogos 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 de la interfaz de usuario persistente, parece que com.android.phone se bloquea al menos 10 veces por segundo, inundando logcat, y haciendo casi imposible el uso del teléfono.

¿Hay alguna esperanza de arreglo o la única opción es un hard reset?

1 votos

Haga datos claros para com.android.providers.telephony (la aplicación lleva la etiqueta "Almacenamiento/proveedores de telefonía"). Ya que estás en ello, hazlo también para la aplicación Teléfono ( com.android.phone ), reinicie y nos cuente los resultados. Parece que la base de datos de com.android.providers.telephony no se puede leer. Es posible que no puedas borrar los datos de esas aplicaciones. En ese caso, elimina sus directorios /data/data de la faz de la tierra.

0 votos

Borrar la caché (desde el recovery) puede ayudar

0 votos

Intenté eliminar estas carpetas usando Total Commander en modo Root. Conseguí borrarlas pero no sirvió de nada. También hice un reinicio :( No puedo llamar a nadie...

8voto

Dave Abad Puntos 71

Esto se debe a un cambio en el código.

Como ha dicho Firelord, borra los datos de las aplicaciones, Esto se puede hacer así ( esto también borrará tu base de datos de SMS/MMS, así que asegúrate de hacer una copia de seguridad antes ):

adb shell
rm -fr /data/data/com.android.providers.telephony/
rm -fr /data/data/com.android.phone/
exit

La bandera -f es para forzar y la bandera -r significa recursivo.

0 votos

¡Ha funcionado! Gracias. También noté esta línea en mi logcat: TelephonyProvider: dbh.onUpgrade:+ db=SQLiteDatabase: /data/user/0/com.android.providers.telephony/databases/telep‌​hony.db oldV=1114120 newV=1376264 Después de eliminar el directorio de datos y reiniciar el sistema, los diálogos de cierre forzado se detuvieron. ¿Qué había en la base de datos? Me he dado cuenta de que todos mis mensajes de texto han desaparecido. ¿Algo más?

2 votos

Lectores: asegúrese de reiniciar el dispositivo después de borrar esos directorios.

0 votos

Interesantemente no fue posible borrar los datos desde el menú de la App. Tuve que reiniciar en TWRP y borrar la carpeta allí (la primera fue suficiente)

6voto

iSid Puntos 4063

Yo tuve el mismo problema al actualizar a CM13 desde CM12.1. Usted puede resolver este problema sin borrar sus archivos de base de datos y por lo tanto la pérdida de datos como se sugiere en las otras respuestas.

El culpable parece ser una base de datos rota Código onUpgrade en el TelephonyProvider de CM. La página web ppp_number de la tabla de portadores no existe, pero el código de actualización asume que ya existe.

Lo solucioné copiando el telephony.db a mi máquina local de Linux y revirtiendo la versión de la base de datos a la versión 16 << 16 | 6 = 1048582 para forzar al código de actualización a añadir las columnas que faltan. La página web ALTER TABLE en el código enlazado están protegidas por bloques try-catch, de modo que no importa si alguna de las columnas ya existe. Arranca el teléfono en recovery (por ejemplo, TWRP) para tener privilegios adb Root y evitar carreras de bloqueo con el Android Runtime que está constantemente tratando de 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

A continuación, abra la base de datos con sqlite y establezca la versión

% sqlite3 telephony.db
sqlite> PRAGMA user_version = 1048582;
sqlite> .quit

Cargar de nuevo la base de datos modificada en el dispositivo y arreglar 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ías intentar esto en el sistema roto, lo que no recomendaría. Probablemente tendrías que convertirte en Root con adb root para copiar y modificar los archivos con adb .

0 votos

Excelente atención a los detalles. Se agradece mucho la explicación. Al igual que @gedenkt, he seguido estas instrucciones, pero tampoco me han funcionado :-/ Simplemente borrando estos dos *.db* Sin embargo, los archivos resolvieron el problema.

0 votos

Puede utilizar el comando "vacuum" para fusionar el diario con la base de datos. $ sqlite3 telephony.db VACUUM

4voto

gedenkt Puntos 41

Probé la solución de Sebastián, pero el error persistió. La respuesta aceptada hace que se pierdan todos los SMS, por lo que no era una opción para mí. Sin embargo, después de arrancar en modo de recuperación y borrar los archivos

/data/data/com.android.providers.telephony/databases/telephony.db
/data/data/com.android.providers.telephony/databases/telephony.db-journal

el teléfono volvió a funcionar perfectamente. Los archivos parecen contener sólo datos autogenerados, por lo que es seguro eliminarlos.

0 votos

¿Cómo puedo eliminar ciertos archivos en el modo de recuperación?

1 votos

@Hinrich Si utilizas un recovery completo como TWRP, puedes utilizar el gestor de archivos incorporado.

0 votos

Aquí hay un poco más de detalle sobre TWRP. En mi caso, estoy ejecutando Safestrap 3.75 (TWRP v2.7.1.0), y tuve que utilizar el botón "Montar", a continuación, marque "Datos", a continuación, volver, a continuación, utilizar el botón "Avanzado" para utilizar el botón "Administrador de archivos" (a continuación, navegar, a partir de la carpeta "datos").

1voto

NPattison Puntos 11

Si no puedes entrar en un adb shell o eliminar el directorio de tu teléfono porque es inutilizable también puedes eliminar el directorio de whitin TWRP recovery.

1 votos

Por favor, añada las indicaciones necesarias para hacerlo en su respuesta. Qué pasa si el OP no tiene TWRP?

0voto

Hinrich Puntos 101

Tuve el mismo problema después de actualizar de CM12 a CM13. Aquí es cómo yo era capaz de solucionarlo:

He eliminado estos dos directorios

/data/user/0/com.android.providers.telephony
/data/data/com.android.phone/

completamente desde mi teléfono (Nexus 5). He utilizado ES Explorer para hacerlo, tuve que encender Root Mode y Show Hidden Files para poder borrar los archivos de ese directorio.

El registro de llamadas y los SMS siguen ahí, no puedo ver ninguna desventaja derivada de la eliminación de esos directorios. Todo parece funcionar sin problemas de nuevo.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X