Pytanie:
„com.android.phone przestał działać” po brudnym flashowaniu CM13
friederbluemle
2015-11-25 23:11:25 UTC
view on stackexchange narkive permalink

Po brudnym flashowaniu mojego OnePlus One (boczek) z CM12.1 na CM13, ciągle otrzymuję wyskakujące okienka dialogowe wymuszania zamknięcia

  Niestety proces com.android.phone został zatrzymany  

Logcat jest wypełniony śladami stosu w następujący sposób:

  Zamykanie VMFATAL EXCEPTION: mainProcess: com.android.phone, PID: 13148java.lang.RuntimeException: Nie można pobrać dostawca com.android.providers.telephony.TelephonyProvider: java.lang.IllegalStateException: nie można odczytać wiersza 0, kolumna -1 z CursorWindow. Upewnij się, że kursor został poprawnie zainicjowany przed uzyskaniem z niego dostępu do danych. na android.app.ActivityThread.installProvider (ActivityThread.java:5205) na android.app.ActivityThread.installContentProviders (ActivityThread.java:4797) pod adresem android.app.ActivityThread.handleBindApplication (ActivityThread.java:4737) na android.app. ActivityThread.-wrap1 (ActivityThread.java) na android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1424) na android.os.Handler.dispatchMessage (Handler.java:102) na android.os.Looper.loop ( Looper.java:148) na android.app.ActivityThread.main (ActivityThread.java:5466) na java.lang.reflect.Method.invoke (metoda natywna) na com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run ( ZygoteInit.java:726) w com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Spowodowane przez: java.lang.IllegalStateException: nie można odczytać wiersza 0, kolumna -1 z CursorWindow. Upewnij się, że kursor został poprawnie zainicjowany przed uzyskaniem z niego dostępu do danych. na android.database.CursorWindow.nativeGetString (metoda macierzysta) na android.database.CursorWindow.getString (CursorWindow.java:438) na android.database.AbstractWindowedCursor.getString (AbstractWindowedCursor.java:51) pod adresem com.android.onypriders .TelephonyProvider $ DatabaseHelper.getStringValueFromCursor (TelephonyProvider.java:993) at com.android.providers.telephony.TelephonyProvider $ DatabaseHelper.copyPreservedApnsToNewTable (TelephonyProvider.java:905)
pod adresem com.android.providers.telephony.TelephonyProvider $ DatabaseHelper.onUpgrade (TelephonyProvider.java:641) pod adresem android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked (SQLiteOpenHelper.java:256) w android.datgetelpenHabaseOQLBazie .java: 187) pod adresem com.android.providers.telephony.TelephonyProvider.onCreate (TelephonyProvider.java:1457) pod adresem android.content.ContentProvider.attachInfo (ContentProvider.java:1748) pod adresem android.content.ContentProvider.attachInfo (ContentProvider.attider. java: 1723) na android.app.ActivityThread.installProvider (ActivityThread.java:5202) ... 10 więcej  

Kiedy w jakiś sposób pozbędę się wyskakującego okienka interfejsu użytkownika, wygląda na to, że com.android.phone ulega awarii co najmniej 10 razy na sekundę, zalewając logcat i prawie niemożliwym jest korzystanie z telefonu.

Czy jest jakaś nadzieja na rozwiązanie, czy też jest twardy reset to jedyna opcja?

Wyczyść dane dla „com.android.providers.telephony” (aplikacja jest oznaczona etykietą „Telefon / Pamięć telefoniczna / dostawcy”). Kiedy już to robisz, zrób to również dla aplikacji Telefon (`com.android.phone`), uruchom ponownie i powiedz nam o wynikach. Wygląda na to, że nie można odczytać bazy danych „com.android.providers.telephony”. Możliwe, że nie możesz wyczyścić danych z tych aplikacji. W takim przypadku usuń ich katalogi / data / data z powierzchni ziemi.
Pomocne może być wyczyszczenie pamięci podręcznej (z odzyskiwania)
Próbowałem usunąć te foldery za pomocą Total Commander w trybie root. Udało mi się usunąć, ale to nie pomogło. Zrestartowałem również :( Nie mogę do nikogo zadzwonić ...
Pięć odpowiedzi:
Aaahh
2015-11-26 13:27:53 UTC
view on stackexchange narkive permalink

Było to spowodowane zmianą kodu.

Jak powiedział Firelord, wyczyść dane aplikacji, można to zrobić w ten sposób ( spowoduje to również usunięcie SMS-ów / MMS-ów bazy danych, więc pamiętaj, aby wcześniej wykonać ich kopię zapasową ):

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

Flaga -f oznacza siłę, a flaga -r oznacza rekurencję.

To się udało! Dzięki. Zauważyłem również tę linię w moim logcat: `TelephonyProvider: dbh.onUpgrade: + db = SQLiteDatabase: /data/user/0/com.android.providers.telephony/databases/telephony.db oldV = 1114120 newV = 1376264` Po usunięciu katalog danych i restart, okna dialogowe wymuszania zamknięcia zostały zatrzymane. Co było w bazie danych? Zauważyłem, że zniknęły wszystkie moje SMS-y. Coś jeszcze?
** Czytelnicy: ** po usunięciu tych katalogów pamiętaj o ponownym uruchomieniu urządzenia.
Co ciekawe, nie udało się usunąć danych z menu aplikacji. Musiałem zrestartować się w TWRP i usunąć tam folder (pierwszy był wystarczający)
Ta metoda nie działa w przypadku CyanogenMod 14 / Android 7
@Adem Nov, co to za logcat?
Wyczyściłem cm14 i ponownie zainstalowałem cm13, ponieważ cm14 był dla mnie zbyt niedokończony. U mnie wszystko działa dobrze na cm13.
Bazy danych @Adem mogły przenieść http://android.stackexchange.com/a/155895/136434
Sebastian Schrader
2016-01-27 05:43:20 UTC
view on stackexchange narkive permalink

Miałem ten sam problem podczas aktualizacji do CM13 z CM12.1. Możesz rozwiązać ten problem bez usuwania plików bazy danych, a tym samym utraty danych, jak sugerowano w innych odpowiedziach.

Wydaje się, że winowajcą jest uszkodzona baza danych kod przy aktualizacji w TelephonyProvider CM. Kolumna ppp_number w tabeli przewoźników nie istnieje, ale kod aktualizacji zakłada, że ​​już istnieje.

Rozwiązałem to kopiując plik telephony.db na mój lokalny komputer z systemem Linux i przywracając wersja bazy danych do wersji 16 << 16 | 6 = 1048582 , aby wymusić na kodzie aktualizacji dodanie brakujących kolumn. Instrukcje ALTER TABLE w połączonym kodzie są chronione przez bloki try-catch, więc nie ma znaczenia, czy niektóre kolumny już istnieją. Uruchom telefon w trybie odzyskiwania (np. TWRP), aby mieć uprawnienia roota adb i uniknąć wyścigów blokujących za pomocą środowiska wykonawczego Androida, które nieustannie próbuje uruchomić dostawcę telefonii.

 % 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

Utwórz kopie zapasowe

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

Następnie otwórz bazę danych za pomocą sqlite i ustaw wersję

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

Prześlij zmienioną bazę danych z powrotem do urządzenia i napraw uprawnienia

 % 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 / co m.android.providers.telephony / databases # chown radio: radio telephony.db / data / data / com.android.providers.telephony / databases # chmod 660 telephony.db  

Możesz również spróbować tego w zepsutym systemie, czego nie polecam. Prawdopodobnie musiałbyś mieć uprawnienia roota z adb root , aby kopiować i modyfikować pliki za pomocą adb .

Doskonała dbałość o szczegóły! Wyjaśnienie jest bardzo cenne. Podobnie jak @gedenkt, postępowałem zgodnie z tymi instrukcjami, ale one też nie działały dla mnie. : - / Proste usunięcie tych dwóch plików `* .db *` jednak rozwiązało problem.
Możesz użyć polecenia „vacuum”, aby scalić dziennik z bazą danych. `$ sqlite3 telephony.db VACUUM`
gedenkt
2016-03-25 23:47:04 UTC
view on stackexchange narkive permalink

Wypróbowałem rozwiązanie Sebastiana, ale błąd się powtarzał. Zaakceptowana odpowiedź powoduje utratę wszystkich twoich SMS-ów, dlatego nie była dla mnie opcją. Jednak po uruchomieniu w trybie odzyskiwania i usunięciu plików

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

telefon znów działał idealnie. Pliki wydają się zawierać tylko dane wygenerowane automatycznie, więc można je bezpiecznie usunąć.

Jak mogę usunąć określone pliki w trybie odzyskiwania?
@Hinrich Jeśli używasz w pełni funkcjonalnego odzyskiwania, takiego jak TWRP, możesz użyć wbudowanego menedżera plików.
Oto nieco więcej szczegółów na temat TWRP. W moim przypadku używam Safestrap 3.75 (TWRP v2.7.1.0) i musiałem użyć przycisku „Zamontuj”, a następnie zaznaczyć „Dane”, a następnie wrócić, a następnie użyć przycisku „Zaawansowane”, aby użyć Przycisk „Menedżer plików” (następnie nawiguj, zaczynając od folderu „dane”).
Bossdwarf
2016-01-15 18:56:49 UTC
view on stackexchange narkive permalink

Jeśli nie możesz dostać się do powłoki adb lub usunąć katalogu z telefonu, ponieważ jest on bezużyteczny, możesz również usunąć katalog z whitin TWRP recovery.

Dodaj niezbędne wskazówki w swojej odpowiedzi. Co jeśli OP nie ma TWRP?
Hinrich
2016-05-09 12:14:06 UTC
view on stackexchange narkive permalink

Miał ten sam problem po aktualizacji z CM12 do CM13. Oto jak udało mi się to naprawić:

Usunąłem te dwa katalogi

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

całkowicie z mojego telefonu (Nexus 5). Użyłem do tego ES Explorer , musiałem włączyć Root Mode i Show Hidden Files , aby móc usuwać pliki w tym katalogu.

Rejestr połączeń i SMS-y nadal istnieją, nie widzę żadnych wad wynikających z usunięcia tych katalogów. Wydaje się, że wszystko znowu działa gładko.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...