Verwenden Sie einen PhoneStateListener, um zu sehen, wann der Anruf beendet wird. Sie müssen höchstwahrscheinlich die Listener-Aktionen auslösen, um auf den Start des Aufrufs zu warten (warten Sie, bis der Wechsel von PHONE_STATE_OFFHOOK zu PHONE_STATE_IDLE erneut erfolgt) und dann Code schreiben, um Ihre App wieder in den IDLE-Status zu versetzen.
Möglicherweise müssen Sie den Listener in einem Dienst ausführen, um sicherzustellen, dass er aktiv bleibt und Ihre App neu gestartet wird. ein Beispielcode:
EndCallListener callListener = new EndCallListener();
TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);
Hörerdefinition:
private class EndCallListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
if(TelephonyManager.CALL_STATE_RINGING == state) {
Log.i(LOG_TAG, "RINGING, number: " + incomingNumber);
}
if(TelephonyManager.CALL_STATE_OFFHOOK == state) {
//wait for phone to go offhook (probably set a boolean flag) so you know your app initiated the call.
Log.i(LOG_TAG, "OFFHOOK");
}
if(TelephonyManager.CALL_STATE_IDLE == state) {
//when this state occurs, and your flag is set, restart your app
Log.i(LOG_TAG, "IDLE");
}
}
}
Fügen Sie Ihrer Manifest.xml
Datei die folgende Berechtigung hinzu:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Dies betrifft die von Starter gestellte Frage.
Das Problem mit Ihrem Code ist, dass Sie die Nummer nicht richtig übergeben.
Der Code sollte sein:
Vergessen Sie nicht, die Berechtigung in die Manifestdatei aufzunehmen.
oder
für Notrufnummer falls
DIAL
verwendet.quelle
Wir hatten das gleiche Problem und konnten es lösen, indem
PhoneStateListener
wir a verwendeten , um zu identifizieren, wann der Anruf endet, aber zusätzlich mussten wirfinish()
die ursprüngliche Aktivität ausführen, bevor wir sie erneut startetenstartActivity
, da sich sonst das Anrufprotokoll davor befand.quelle
Ich fand den EndCallListener das funktionalste Beispiel. Um das beschriebene Verhalten zu erhalten (finish (), call, restart), habe ich einige SharedPreferences hinzugefügt, damit der Listener einen Verweis zum Verwalten dieses Verhaltens hatte.
Mein OnClick, Initialisieren und EndCallListener antworten nur auf Anrufe von der App. Andere Anrufe werden ignoriert.
Fügen Sie diese zu strings.xml hinzu
und so etwas in Ihrem Manifest, wenn Sie vor dem Anruf zum Erscheinungsbild zurückkehren müssen
und füge diese in deine 'myActivity' ein
Verwenden Sie diese Option, um das Verhalten für Ihren onClick in myActivity zu initiieren, z. B. nach onCreate ()
Sie sollten feststellen, dass das Klicken auf Ihre Telefonnummernliste Ihre Aktivität beendet, die Nummer anruft und nach Beendigung des Anrufs zu Ihrer Aktivität zurückkehrt.
Wenn Sie einen Anruf von außerhalb Ihrer App tätigen, während diese noch verfügbar ist, wird Ihre Aktivität nicht neu gestartet (es sei denn, sie entspricht der zuletzt angerufenen BParty-Nummer).
:) :)
quelle
Sie können startActivityForResult () verwenden
quelle
Dies ist aus meiner Sicht eine Lösung:
Natürlich müssen Sie in der Definition der Aktivität (Klasse) View.OnClickListener implementieren.
quelle
Hier ist mein Beispiel: Zuerst muss der Benutzer die Nummer eingeben, die er wählen möchte, und dann eine Anruftaste drücken und zum Telefon geleitet werden. Nach dem Abbrechen des Anrufs wird der Benutzer an die Anwendung zurückgesendet. Dazu muss die Schaltfläche eine onClick-Methode (in diesem Beispiel 'makePhoneCall') in der XML-Datei haben. Sie müssen die Berechtigung auch im Manifest registrieren.
Manifest
Aktivität
XML
quelle
quelle
Wenn Sie einen Listener verwenden möchten, müssen Sie diese Berechtigung auch dem Manifest hinzufügen.
quelle
In PhoneStateListener nach Beendigung des Anrufs besser nutzen:
Wobei CallDispatcherActivity die Aktivität ist, bei der der Benutzer einen Anruf gestartet hat (in meinem Fall an einen Taxidienst-Dispatcher). Dadurch wird nur die Android-Telefonie-App von oben entfernt. Der Benutzer erhält statt des hässlichen Codes, den ich hier gesehen habe, zurück.
quelle
((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE);
Intent intentRestart = new Intent(ControlPanel.this, ControlPanel.class);
. Ich sollte darauf hinweisen, dass sich der PhoneStateListener auch in ControlPanel befindet. Das heißt, mein Ziel ist es, die Benutzeroberfläche auf den Zustand zurückzusetzen, in dem sie sich vor dem Einleiten des Telefonanrufs befand. Irgendwelche Vorschläge?Um zu Ihrem zurückzukehren
Activity
, müssen Sie zuhörenTelephonyStates
. Daraufhinlistener
können Sie eine sendenIntent
, um IhrActivity
Telefon wieder zu öffnen, sobald das Telefon inaktiv ist.Zumindest werde ich das so machen.
quelle
quelle
Versuchen Sie es mit:
am Ende der Aktivität. Sie werden zu Ihrer vorherigen Aktivität weitergeleitet.
quelle
Wenn
PhoneStateListener
es verwendet wird, muss sichergestellt werden, dass dasPHONE_STATE_IDLE
folgende aPHONE_STATE_OFFHOOK
verwendet wird, um die nach dem Aufruf auszuführende Aktion auszulösen. Wenn der Auslöser beim Sehen auftrittPHONE_STATE_IDLE
, werden Sie ihn am Ende vor dem Anruf ausführen. Weil Sie sehen werden, wie sich der Zustand ändertPHONE_STATE_IDLE -> PHONE_STATE_OFFHOOK -> PHONE_STATE_IDLE.
quelle
((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(new PhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE)
weiterhin den Telefonstatus ab und ist aktiv, bis es explizit mit((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE)
// in setonclicklistener diesen Code einfügen:
// Erlaubnis zum Aufruf im Manifest geben:
quelle
@Dmitri Novikov,
FLAG_ACTIVITY_CLEAR_TOP
löscht alle aktiven Instanzen über der neuen. Daher kann die alte Instanz beendet werden, bevor der Vorgang abgeschlossen ist.quelle
Fügen Sie hinzu, dies ist Ihre XML:
android:autoLink="phone"
quelle
Schritte:
1) Fügen Sie die erforderlichen Berechtigungen in die
Manifest.xml
Datei ein.2) Erstellen Sie einen Listener für die Änderungen des Telefonstatus.
3) Initialisieren Sie den Listener in Ihrem
OnCreate
aber wenn Sie Ihre Anwendung letzten Zustand fortsetzen möchten oder es von der Rückseite Stapel zurück zu bringen , dann ersetzen
FLAG_ACTIVITY_CLEAR_TOP
mitFLAG_ACTIVITY_SINGLE_TOP
Verweisen Sie auf diese Antwort
quelle
Für weitere Informationen klicken Sie hier http://androiddhina.blogspot.in/2015/10/how-to-make-phone-call-from-android.html
quelle
Wenn Sie Ihren Anruf starten, sieht es gut aus.
Es gibt jedoch einen Unterschied zwischen Android 11+ und Down, wenn es darum geht, Ihre App in den Vordergrund zu rücken.
Android 10 oder weniger müssen Sie eine neue Absicht starten, Android 11+ verwenden Sie einfach
BringTaskToFront
Im Anrufstatus IDLE:
Ich habe die
MyActivity.MyActivityTaskId
Variable beim Aufrufen meiner Aktivität so festgelegt, dass dies nicht funktioniert. Diese Variable wird auf der übergeordneten Aktivitätsseite der Seite festgelegt, zu der Sie zurückkehren möchten.MyActivityTaskId
ist eine statische Variable in meiner AktivitätsklasseIch hoffe das wird für dich funktionieren. Ich verwende den obigen Code etwas anders. Ich öffne meine App, sobald der Anruf beantwortet wurde, damit der Benutzer die Details des Anrufers sehen kann.
Ich habe auch ein paar Sachen in die gesetzt
AndroidManifest.xml
:und Berechtigungen:
Bitte stellen Sie Fragen, wenn Sie stecken bleiben.
quelle