"Com.android.phone hat aufgehört" nach schmutzig blinkendem CM13

8

Nach dem schmutzigen Flashen meines OnePlus One (Speck) von CM12.1 auf CM13 wird ständig ein Popup zum Schließen von Dialogen erzwungen

Unfortunately the process com.android.phone has stopped

Logcat ist mit folgenden Stacktraces gefüllt:

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

Sobald ich das permanente UI-Popup irgendwie los bin, scheint es, als würde es com.android.phonemindestens 10 Mal pro Sekunde abstürzen, Logcat überfluten und es fast unmöglich machen, das Telefon zu benutzen.

Gibt es Hoffnung auf eine Lösung oder ist ein Hard-Reset die einzige Option?

friederbluemle
quelle
1
Löschen Sie Daten für com.android.providers.telephony(App trägt die Bezeichnung "Telefon / Telefonie-Speicher / Anbieter"). Wenn Sie schon dabei sind, machen Sie es auch für die Telefon-App ( com.android.phone), starten Sie neu und teilen Sie uns die Ergebnisse mit. Es scheint, dass die Datenbank von com.android.providers.telephonynicht gelesen werden kann. Möglicherweise können Sie keine Daten für diese Apps löschen. Entfernen Sie in diesem Fall ihre Verzeichnisse / data / data vom Erdboden.
Feuerlord
Das Löschen des Caches (von der Wiederherstellung) kann helfen
Ankush
Ich habe versucht, diese Ordner mit Total Commander im Root-Modus zu entfernen. Ich habe es geschafft zu löschen, aber es hat nicht geholfen. Ich habe auch einen Neustart gemacht :( Ich kann niemanden anrufen ...
Nickon

Antworten:

8

Dies lag an einer Änderung des Codes.

Löschen Sie , wie Firelord gesagt hat, die Daten für die Apps. Dies kann folgendermaßen geschehen ( dies löscht auch Ihre SMS / MMS-Datenbank, stellen Sie also sicher, dass Sie diese vorher sichern ):

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

Das Flag -f steht für force und das Flag -r bedeutet rekursiv.

Aaahh
quelle
Das hat funktioniert! Vielen Dank. Ich habe auch diese Zeile in meinem Logcat bemerkt: TelephonyProvider: dbh.onUpgrade:+ db=SQLiteDatabase: /data/user/0/com.android.providers.telephony/databases/telephony.db oldV=1114120 newV=1376264Nach dem Entfernen des Datenverzeichnisses und einem Neustart wurden die erzwungenen Dialogfelder zum Schließen gestoppt. Was war in der Datenbank? Ich habe festgestellt, dass alle meine Textnachrichten weg sind. Noch etwas?
Friederbluemle
2
Leser: Stellen Sie sicher, dass Sie das Gerät nach dem Löschen dieser Verzeichnisse neu starten.
Feuerlord
Interessanterweise war es nicht möglich, die Daten aus dem App-Menü zu löschen. Ich musste TWRP neu starten und den Ordner dort löschen (der erste war ausreichend)
reox
Diese Methode funktioniert nicht für Cyanogenmod 14 / Android 7
@Adem Nov, was ist der Logcat?
Aaahh
6

Ich hatte das gleiche Problem beim Upgrade von CM12.1 auf CM13. Sie können dieses Problem lösen, ohne Ihre Datenbankdateien zu löschen und damit Daten zu verlieren, wie in den anderen Antworten vorgeschlagen.

Der Schuldige scheint eine defekte Datenbank im Upgrade-Code im TelephonyProvider von CM zu sein. Die ppp_numberSpalte der Carrier-Tabelle ist nicht vorhanden, der Upgrade-Code geht jedoch davon aus, dass sie bereits vorhanden ist.

Ich habe es gelöst, indem ich die Datei telephony.db auf meinen lokalen Linux-Computer kopiert und die Datenbankversion auf Version zurückgesetzt habe 16 << 16 | 6 = 1048582, um den Upgrade-Code zum Hinzufügen der fehlenden Spalten zu zwingen. Die ALTER TABLEAnweisungen im verknüpften Code werden durch Try-Catch-Blöcke geschützt, sodass es keine Rolle spielt, ob einige der Spalten bereits vorhanden sind. Starten Sie das Telefon in die Wiederherstellung (z. B. TWRP), um AdB-Root-Berechtigungen zu erhalten, und vermeiden Sie Sperrenrennen mit der Android Runtime, die ständig versucht, den Telefonieanbieter zu starten.

% 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

Erstellen Sie Backups

% cp telephony.db telephony.db.bak
% cp telephony.db-journal telephony.db-journal.bak

Öffnen Sie dann die Datenbank mit SQLite und legen Sie die Version fest

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

Laden Sie die geänderte Datenbank zurück auf das Gerät und korrigieren Sie die Berechtigungen

% 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

Sie können dies auch auf dem kaputten System versuchen, was ich nicht empfehlen würde. Sie müssten wahrscheinlich root adb rootwerden, um die Dateien mit zu kopieren und zu ändern adb.

Sebastian Schrader
quelle
Hervorragende Liebe zum Detail! Die Erklärung wird sehr geschätzt. Wie @gedenkt habe ich diese Anweisungen befolgt, aber sie haben auch bei mir nicht funktioniert. : - / Das einfache Löschen dieser beiden *.db*Dateien hat das Problem jedoch gelöst.
Tommy Stanton
Mit dem Befehl "Vakuum" können Sie das Journal mit der Datenbank zusammenführen. $ sqlite3 telephony.db VACUUM
tlwhitec
4

Ich habe Sebastians Lösung ausprobiert, aber der Fehler blieb bestehen. Die akzeptierte Antwort führt dazu, dass alle Ihre SMS verloren gehen. Daher war dies für mich keine Option. Nach dem Booten in den Wiederherstellungsmodus und dem Löschen der Dateien

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

Das Telefon funktionierte wieder einwandfrei. Die Dateien scheinen nur automatisch generierte Daten zu enthalten, daher ist es sicher, sie zu löschen.

gedenkt
quelle
Wie kann ich bestimmte Dateien im Wiederherstellungsmodus löschen?
Hinrich
1
@Hinrich Wenn Sie eine Wiederherstellung mit vollem Funktionsumfang wie TWRP verwenden, können Sie den integrierten Dateimanager verwenden.
Enigma
Hier ist ein bisschen mehr Detail über TWRP. In meinem Fall verwende ich Safestrap 3.75 (TWRP v2.7.1.0) und musste die Schaltfläche "Bereitstellen" verwenden, dann "Daten" aktivieren, dann zurückgehen und dann die Schaltfläche "Erweitert" verwenden, um die zu verwenden Schaltfläche "Dateimanager" (dann navigieren Sie ausgehend vom Ordner "Daten").
Tommy Stanton
1

Wenn Sie nicht in eine ADB-Shell gelangen oder das Verzeichnis von Ihrem Telefon entfernen können, weil es unbrauchbar ist, können Sie das Verzeichnis auch aus der TWRP-Wiederherstellung entfernen.

Bossdwarf
quelle
1
Bitte fügen Sie in Ihrer Antwort die dazu erforderlichen Anweisungen hinzu. Was ist, wenn das OP kein TWRP hat?
Tamoghna Chowdhury
0

Hatte das gleiche Problem nach dem Update von CM12 auf CM13. So konnte ich das Problem beheben:

Ich habe diese beiden Verzeichnisse entfernt

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

vollständig von meinem Telefon (Nexus 5). Früher ES Explorermusste ich mich einschalten Root Modeund Show Hidden FilesDateien in diesem Verzeichnis löschen können.

Anrufprotokoll und SMS sind noch vorhanden. Sie können keine Nachteile erkennen, die sich aus dem Löschen dieser Verzeichnisse ergeben. Alles scheint wieder reibungslos zu funktionieren.

Hinrich
quelle