utilisez un PhoneStateListener pour voir quand l'appel est terminé. vous devrez probablement déclencher les actions de l'écouteur pour attendre le début de l'appel (attendez que le PHONE_STATE_OFFHOOK soit à nouveau remplacé par PHONE_STATE_IDLE), puis rédigez du code pour ramener votre application à l'état IDLE.
vous devrez peut-être exécuter l'écouteur dans un service pour vous assurer qu'il reste actif et que votre application est redémarrée. un exemple de code:
EndCallListener callListener = new EndCallListener();
TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);
Définition de l'auditeur:
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");
}
}
}
Dans votre Manifest.xml
fichier, ajoutez l'autorisation suivante:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
fromage au clair de lune
la source
Ceci concerne la question posée par Starter.
Le problème avec votre code est que vous ne transmettez pas correctement le numéro.
Le code doit être:
N'oubliez pas d'ajouter l'autorisation dans le fichier manifeste.
ou
pour le numéro d'urgence en cas d'
DIAL
utilisation.la source
Nous avons eu le même problème et avons réussi à le résoudre en utilisant un
PhoneStateListener
pour identifier la fin de l'appel, mais en plus, nous devions effectuerfinish()
l'activité d'origine avant de la redémarrerstartActivity
, sinon le journal des appels serait devant.la source
J'ai trouvé EndCallListener l'exemple le plus fonctionnel, pour obtenir le comportement décrit (finish (), appel, redémarrage), j'ai ajouté quelques SharedPreferences afin que l'auditeur ait une référence pour gérer ce comportement.
My OnClick, initialise et EndCallListener ne répondent qu'aux appels de l'application. Autres appels ignorés.
ajoutez-les à strings.xml
et quelque chose comme ça dans votre manifeste si vous avez besoin de revenir à l'apparence avant l'appel
et mettez-les dans votre 'myActivity'
utilisez ceci pour initier le comportement de votre onClick dans myActivity, par exemple après onCreate ()
Vous devriez constater que cliquer sur votre liste de numéros de téléphone termine votre activité, appelle le numéro et revient à votre activité lorsque l'appel se termine.
Passer un appel depuis l'extérieur de votre application alors qu'elle est toujours là ne redémarrera pas votre activité (à moins que ce ne soit le même que le dernier numéro BParty appelé).
:)
la source
vous pouvez utiliser startActivityForResult ()
la source
C'est la solution de mon point de vue:
Bien sûr, dans la définition d'activité (classe), vous devez implémenter View.OnClickListener.
la source
Voici mon exemple, d'abord l'utilisateur doit écrire le numéro qu'il souhaite composer, puis appuie sur un bouton d'appel et est dirigé vers le téléphone. Après l'annulation de l'appel, l'utilisateur est renvoyé vers l'application. Pour cela, le bouton doit avoir une méthode onClick ('makePhoneCall' dans cet exemple) dans le xml. Vous devez également enregistrer l'autorisation dans le manifeste.
Manifeste
Activité
XML
la source
la source
Si vous comptez utiliser un écouteur, vous devrez également ajouter cette autorisation au manifeste.
la source
À l'intérieur de PhoneStateListener après avoir vu l'appel est terminé, une meilleure utilisation:
Où CallDispatcherActivity est l'activité où l'utilisateur a lancé un appel (vers un répartiteur de service de taxi, dans mon cas). Cela supprime simplement l'application de téléphonie Android du haut, l'utilisateur récupère au lieu du code laid que j'ai vu ici.
la source
((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE);
Intent intentRestart = new Intent(ControlPanel.this, ControlPanel.class);
. Je dois souligner que PhoneStateListener est également dans ControlPanel. C'est-à-dire que mon objectif est de restaurer l'interface utilisateur dans l'état dans lequel elle se trouvait avant de lancer l'appel téléphonique. Aucune suggestion?Pour revenir au vôtre
Activity
, vous devrez écouterTelephonyStates
. Sur cela,listener
vous pouvez envoyer unIntent
pour rouvrir votreActivity
une fois que le téléphone est inactif.Au moins c'est comme ça que je vais le faire.
la source
la source
Essayez d'utiliser:
à la fin de l'activité. Il vous redirigera vers votre activité précédente.
la source
Quand
PhoneStateListener
est utilisé, il faut s'assurer que lePHONE_STATE_IDLE
suivantPHONE_STATE_OFFHOOK
est utilisé pour déclencher l'action à effectuer après l'appel. Si le déclencheur se produit en voyantPHONE_STATE_IDLE
, vous finirez par le faire avant l'appel. Parce que tu verras l'état changerPHONE_STATE_IDLE -> PHONE_STATE_OFFHOOK -> PHONE_STATE_IDLE.
la source
((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(new PhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE)
continuera à écouter l'état du téléphone et sera actif jusqu'à ce qu'il soit explicitement arrêté avec((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE)
// dans setonclicklistener mettez ce code:
// donne la permission d'appeler dans le manifeste:
la source
@Dmitri Novikov,
FLAG_ACTIVITY_CLEAR_TOP
efface toute instance active au-dessus de la nouvelle. Ainsi, il peut mettre fin à l'ancienne instance avant de terminer le processus.la source
Ajoutez ceci est votre xml:
android:autoLink="phone"
la source
Pas:
1) Ajoutez les autorisations requises dans le
Manifest.xml
fichier.2) Créez un écouteur pour les changements d'état du téléphone.
3) Initialisez l'auditeur dans votre
OnCreate
mais si vous souhaitez reprendre le dernier état de votre application ou la ramener de la pile arrière , remplacez-la
FLAG_ACTIVITY_CLEAR_TOP
parFLAG_ACTIVITY_SINGLE_TOP
Référencez cette réponse
la source
pour plus de références, cliquez ici http://androiddhina.blogspot.in/2015/10/how-to-make-phone-call-from-android.html
la source
Lorsque vous démarrez votre appel, ça a l'air bien.
Il y a une différence entre Android 11+ et down pour mettre votre application au premier plan.
Android 10 ou moins, vous devez démarrer une nouvelle intention, Android 11+ vous utilisez simplement
BringTaskToFront
Dans l'état d'appel IDLE:
J'ai défini le
MyActivity.MyActivityTaskId
lors de l'appel sur mon activité comme ceci, cela ne fonctionne pas, définissez cette variable sur la page d'activité parente de la page à laquelle vous souhaitez revenir.MyActivityTaskId
est une variable statique sur ma classe d'activitéJ'espère que cela fonctionnera pour vous. J'utilise le code ci-dessus un peu différemment, j'ouvre mon application dès que l'appel est répondu pour que l'utilisateur puisse voir les détails de l'appelant.
J'ai également mis des trucs dans le
AndroidManifest.xml
:et autorisations:
Veuillez poser des questions si ou quand vous êtes bloqué.
la source