Ich weiß, das wurde schon oft gefragt, ohne Antworten, aber ich hoffe immer noch, dass jemand das Problem endlich gelöst hat.
Das Problem: Ich habe ein nicht gerootetes Gerät mit Android 2.3. Ich muss einen Dienst erstellen, der:
Wie viele andere bin ich bei # 2 geblieben. Im Folgenden finden Sie die Zusammenfassung der vorgeschlagenen Lösungen:
com.android.internal.telephony.CallManager
und seine Methoden wie registerForPreciseCallStateChanged
(zB dieser ): funktioniert nicht, nein Telefone sind darin registriert, so dass die Ereignisse nicht ausgelöst werden. com.android.internal.telephony.PhoneFactory
, um eine com.android.internal.telephony.Phone
-Instanz zu erhalten (was der Schlüssel zu allem ist): funktioniert nicht, die Factory wird nicht initialisiert; Versuche, es mit einem Aufruf von makeDefaultPhones
zu initialisieren, führen zu einer Sicherheitsausnahme (wie hier ). Es sieht so aus, als ob alles bereits ausprobiert wurde, aber es könnte noch einen Trick geben, der mich retten wird:)
Ich versuche das auch zu bekommen und kann noch keine Lösung finden.
Beim Blick auf den Android-Quellcode habe ich diese Zeilen in ~ / kitchen / jellybean / frameworks / opt / telefonie / src / java / com / android / internal / telephony / Call.java
gefunden %Vor%Ich denke, man könnte wissen, ob ein ausgehender Anruf beantwortet wurde und den ACTIVE-Status überprüft hat, aber ich weiß nicht, wie man diesen Wert aus einer App liest, vielleicht das Framework modifizieren, indem man eine spezifische Funktion wie folgt hinzufügt:
%Vor%Das ist nur eine Idee, aber ich bin mir nicht sicher, wie ich das umsetzen soll, da offensichtlich andere Modifikationen für den Zugriff auf diese neue Funktion von der Anwendungsebene aus vorgenommen werden müssen.
Wenn Sie dies praktikabel finden oder wissen, wie es geht, werden Hilfe und Feedback sehr geschätzt.
Die Lösung in Ihrem dritten Aufzählungszeichen sollte in gerooteten Geräten möglich sein, wenn Sie den Anweisungen in Android INJECT_EVENTS Erlaubnis
Schritt für Schritt ist es etwas wie:
Installieren Sie die Anwendung als System-App mit adb:
adb root
adb remount
adb push MyApp.apk / system / app
adb-Shell chmod 644 /systen/app/MyApp.apk
Starten Sie das Gerät neu.
Ich habe tatsächlich die Lösung in der 2. Kugel versucht und es funktioniert auch nicht für mich (auf einem Galaxy S5 mit Kitkat). Die Lösung im dritten Aufzählungspunkt funktioniert ganz gut. Ungeachtet des Paketnamens wird die App als com.android.phone ausgeführt. Sie müssen also an diesen Prozess anhängen, wenn Sie die App debuggen möchten.
Tags und Links android