Android: Receptor de llamadas entrantes sin permiso
Sé que podemos escuchar el estado del teléfono por el receptor de la difusión con el filtro
Acción android: name = "android.intent.action.PHONE_STATE"
Pero de esta manera requiere permiso
Uses-permission android: name = "android.permission.READ_PHONE_STATE"
¿Cómo determinar la llamada GSM entrante sin este permiso?
PD
Estoy seguro de que esto es posiblemente porque Whatsapp hacerlo.
Cuando estoy hablando en las llamadas de Whatsapp de audio y luego recibió la llamada entrante gsm – whatsapp comprobarlo y establecer la llamada de auto para hacer una pausa. ¿Cómo entienden que necesitan poner pausa?
Whatsapp tiene permiso READ_PHONE_STATE en el archivo de manifiesto, pero compruebo las llamadas en Android 6 y no me concedieron este permiso. Este permiso fue deshabilitado.
Cuando este permiso está deshabilitado, mi Receptor no recibe acción android.intent.action.PHONE_STATE y PhoneStateListener no está funcionando.
- Android para llamar desde un número virtual
- ¿Cómo puedo hacer una llamada telefónica en android y volver a mi actividad cuando se realiza la llamada?
- Aplicación de marcador de Android
- ¿Cómo detecta un sistema operativo Android una llamada entrante?
- MediaPlayer No se detiene cuando se recibe una llamada telefónica
- ¿Cómo aceptar una llamada entrante haciendo clic en un botón?
- ¿Cómo realizar llamadas perdidas?
- Android: ¿Puedes enviar / recibir datos a lo largo de una llamada telefónica?
Encontré una solución sin este permiso.
Primero de todo (cuando nuestra llamada del sorbo comience) necesitamos el foco audio de la petición con el lisener
mAudioManager.requestAudioFocus(afChangeListener, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN);
El afChangeListener puede decirnos entonces someboby cambiar el foco de audio y luego podemos comprobar el canal de audio actual. Si el modo actual es AudioManager.MODE_IN_CALL o AudioManager.MODE_RINGTONE entonces sabemos que la llamada al gsm se inició.
AudioManager.OnAudioFocusChangeListener afChangeListener = new AudioManager.OnAudioFocusChangeListener() { public void onAudioFocusChange(int focusChange) { if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { // Permanent loss of audio focus // Pause playback immediately } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) { ScheduledExecutorService scheduler = App.getInstance().obtainScheduler(); scheduler.schedule(() -> { Logging.i(TAG, "onAudioFocusChange defer mode = " + mAudioManager.getMode()); switch (mAudioManager.getMode()) { case AudioManager.MODE_RINGTONE: case AudioManager.MODE_IN_CALL: //**there we can start standby mode** break; } }, 100, TimeUnit.MILLISECONDS); } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) { Logging.i(TAG, "onAudioFocusChange AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK"); // Lower the volume, keep playing } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { // Your app has been granted audio focus again //**there we can stop standby mode** } } };
En primer lugar whatsapp uso de permiso que se requiere para obtener el estado del teléfono
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Aquí está el vínculo del archivo menifest de WhatsApp.
Usted puede ver su ellos han agregado su y usado dentro de él.
Android sí proporcionar la mejor solución para manejarlo utilizando receptor de radiodifusión. Debe utilizar estos de lo contrario su sistema sería hacky.
Siga estos enlaces para trabajar con el receptor de difusión para detectar llamadas telefónicas.
Espero que esto le ayude.
Cuando el dispositivo Android recibe una llamada telefónica onPause
of Activity
que se estaba mostrando antes de que la llamada telefónica se llama automáticamente y puede pausar la llamada allí.
Puede obtener esto con onReceive método con número de teléfono y todos los detalles con la llamada entrante.
- ¿Hay una manera de crear una biblioteca en haxe que se puede llamar de forma nativa en iOS y Android?
- Cómo reducir el tamaño del botón de radio en android