Tengo una tarea: cambiar el volumen del timbre inmediatamente cuando suene el teléfono. Por ejemplo: Después de detectar que hay una llamada entrante, necesito configurar el volumen del timbre en 0 (silencio) y el vibrador también debe estar desactivado (si aún no está desactivado). Luego hay un retraso cuando necesito realizar otro código (startComputing ();). Después de eso, el volumen del timbre debe cambiarse a cierto valor (por ejemplo, 7) y debe activarse el vibrador. Aquí está mi código:

    public class IncomingCallReceiver extends BroadcastReceiver {
        private AudioManager amanager;
        public void onReceive(Context context, Intent intent) {
            if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) {
                amanager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
                amanager.setRingerMode(0x00000000); // no sound and no vibration            
                startComputing();
                amanager.setRingerMode(0x00000002); // normal
                amanager.setStreamVolume(AudioManager.STREAM_RING, 7,
                        AudioManager.FLAG_SHOW_UI
                                + AudioManager.FLAG_PLAY_SOUND);
            }

        }
        private void startComputing() {
            try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       
        }

}

1) El problema principal es que después de esto: amanager.setStreamVolume (AudioManager.STREAM_RING, 7, AudioManager.FLAG_SHOW_UI + AudioManager.FLAG_PLAY_SOUND); El timbre no suena en absoluto, solo aparece un mensaje de brindis que indica que el nivel de sonido cambió, pero el teléfono no reproduce ningún sonido. ¿Cómo se puede cambiar esto? 2) También existe el problema de que amanager.setRingerMode (0x00000000); no cambia el volumen y la vibración de inmediato, sino en aproximadamente medio segundo. Gracias de antemano. Jacob

1
Jacob 18 nov. 2011 a las 03:04

1 respuesta

La mejor respuesta

No creo que haya nada que pueda hacer para superar el retraso de 1/2 segundo antes de silenciar el timbre. A veces funciona (es decir, muy breve o sin demora), a veces escuchará el timbre durante un breve período de tiempo.

Creo que el problema que tiene es con las banderas pasadas a setStreamVolume.

Prueba esto:

amanager.setStreamVolume(AudioManager.STREAM_RING, 7,
    AudioManager.FLAG_SHOW_UI|AudioManager.FLAG_PLAY_SOUND);

Debe utilizar bit a bit inclusivo o (|), y no una simple adición (+).

1
MasterAM 18 abr. 2015 a las 17:56