use PhoneStateListener para ver cuándo finaliza la llamada. lo más probable es que necesite activar las acciones de escucha para esperar a que comience la llamada (espere hasta que cambie de PHONE_STATE_OFFHOOK a PHONE_STATE_IDLE nuevamente) y luego escriba algún código para que su aplicación vuelva a funcionar en el estado IDLE.
es posible que deba ejecutar el escucha en un servicio para asegurarse de que se mantenga activo y que se reinicie su aplicación. algún código de ejemplo:
EndCallListener callListener = new EndCallListener();
TelephonyManager mTM = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
mTM.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE);
Definición de oyente:
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");
}
}
}
En su Manifest.xml
archivo agregue el siguiente permiso:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Esto se refiere a la pregunta formulada por Starter.
El problema con su código es que no está pasando el número correctamente.
El código debe ser:
No olvide agregar el permiso en el archivo de manifiesto.
o
para número de emergencia en caso de que
DIAL
se utilicefuente
Tuvimos el mismo problema y logramos resolverlo utilizando a
PhoneStateListener
para identificar cuándo finaliza la llamada, pero adicionalmente tuvimos que realizarfinish()
la actividad original antes de comenzar de nuevostartActivity
, de lo contrario el registro de llamadas estaría frente a él.fuente
Encontré que EndCallListener es el ejemplo más funcional, para obtener el comportamiento descrito (terminar (), llamar, reiniciar) agregué algunas SharedPreferences para que el oyente tuviera una referencia para administrar este comportamiento.
My OnClick, initialise y EndCallListener solo responden las llamadas desde la aplicación. Otras llamadas ignoradas.
agréguelos a strings.xml
y algo así en su Manifiesto si necesita volver a la apariencia antes de la llamada
y ponerlos en tu 'myActivity'
use esto para iniciar el comportamiento de su onClick en myActivity, por ejemplo, después de onCreate ()
Debería descubrir que al hacer clic en su lista de números de teléfono finaliza su actividad, realiza la llamada al número y vuelve a su actividad cuando finaliza la llamada.
Hacer una llamada desde fuera de su aplicación mientras está activa no reiniciará su actividad (a menos que sea el mismo que el último número de BParty llamado).
:)
fuente
puedes usar startActivityForResult ()
fuente
Esta es la solución desde mi punto de vista:
Por supuesto, en la definición de Actividad (clase) debe implementar View.OnClickListener.
fuente
Aquí está mi ejemplo, primero el usuario puede escribir el número que desea marcar y luego presiona un botón de llamada y se lo dirige al teléfono. Después de la cancelación de la llamada, el usuario vuelve a la aplicación. Para esto, el botón debe tener un método onClick ('makePhoneCall' en este ejemplo) en el xml. También debe registrar el permiso en el manifiesto.
Manifiesto
Actividad
XML
fuente
fuente
Si va a utilizar un oyente, también deberá agregar este permiso al manifiesto.
fuente
Dentro de PhoneStateListener después de ver que la llamada ha terminado, mejor uso:
Donde CallDispatcherActivity es la actividad en la que el usuario ha lanzado una llamada (a un despachador de servicios de taxi, en mi caso). Esto simplemente elimina la aplicación de telefonía Android de la parte superior, el usuario regresa en lugar del código feo que vi aquí.
fuente
((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE);
Intent intentRestart = new Intent(ControlPanel.this, ControlPanel.class);
. Debo señalar que PhoneStateListener también está dentro de ControlPanel. Es decir, mi objetivo es restaurar la IU al estado en que estaba antes de iniciar la llamada telefónica. ¿Alguna sugerencia?Para volver a su
Activity
, tendrá que escucharTelephonyStates
. En esolistener
, puede enviar un mensajeIntent
para volver a abrir unaActivity
vez que el teléfono esté inactivo.Al menos así es como lo haré.
fuente
fuente
Intenta usar:
Al final de la actividad. Te redirigirá a tu actividad anterior.
fuente
Cuando
PhoneStateListener
se usa, es necesario asegurarse de que sePHONE_STATE_IDLE
siga aPHONE_STATE_OFFHOOK
para activar la acción que se realizará después de la llamada. Si el disparador ocurre al verPHONE_STATE_IDLE
, terminará haciéndolo antes de la llamada. Porque verás el cambio de estadoPHONE_STATE_IDLE -> PHONE_STATE_OFFHOOK -> PHONE_STATE_IDLE.
fuente
((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(new PhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE)
continuará escuchando el estado del teléfono y estará activo hasta que se detenga explícitamente con((TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE)).listen(this, LISTEN_NONE)
// en setonclicklistener pon este código:
// dar permiso para la llamada en manifiesto:
fuente
@Dmitri Novikov,
FLAG_ACTIVITY_CLEAR_TOP
borra cualquier instancia activa además de la nueva. Por lo tanto, puede finalizar la instancia anterior antes de que complete el proceso.fuente
Agregue este es su xml:
android:autoLink="phone"
fuente
Pasos:
1) Agregue los permisos requeridos en el
Manifest.xml
archivo.2) Crear un oyente para los cambios de estado del teléfono.
3) Inicialice al oyente en su
OnCreate
pero si desea reanudar el último estado de su aplicación o recuperarla de la pila posterior , reemplácela
FLAG_ACTIVITY_CLEAR_TOP
conFLAG_ACTIVITY_SINGLE_TOP
Referencia esta respuesta
fuente
para más referencia haga clic aquí http://androiddhina.blogspot.in/2015/10/how-to-make-phone-call-from-android.html
fuente
Al comenzar su llamada, se ve bien.
Sin embargo, hay una diferencia entre Android 11+ y versiones anteriores para llevar su aplicación al frente.
Android 10 o menos necesita comenzar una nueva intención, Android 11+ simplemente usa
BringTaskToFront
En el estado de llamada IDLE:
Establecí el
MyActivity.MyActivityTaskId
cuando hago la llamada en mi actividad de esta manera, si esto no funciona, establezca esta variable en la página de actividad principal de la página a la que desea volver.MyActivityTaskId
es una variable estática en mi clase de actividadEspero que esto funcione para tí. Utilizo el código anterior un poco diferente, abro mi aplicación tan pronto como se responde la llamada para que el usuario pueda ver los detalles de la persona que llama.
También he puesto algunas cosas en el
AndroidManifest.xml
:y permisos:
Por favor haga preguntas si o cuando se atasca.
fuente