volumen solo samsung que porque manos llamadas libres hacer desactivar conteste contestar configurar con como celular automatico automaticamente aumentar audifonos altavoz activa android android-intent android-audiomanager

solo - ¿Cómo activar el altavoz para la llamada entrante mediante programación en Android L?



porque se activa automaticamente el altavoz (2)

Finalmente, tengo la solución. Pongo encima del código ejecutado dentro de un hilo. Funciono bien Este es mi código. Espero que pueda ayudar a alguien

Thread thread = new Thread() { @Override public void run() { try { while(true) { sleep(1000); audioManager.setMode(AudioManager.MODE_IN_CALL); if (!audioManager.isSpeakerphoneOn()) audioManager.setSpeakerphoneOn(true); } } catch (InterruptedException e) { e.printStackTrace(); } } }; thread.start();

Quiero aceptar una llamada entrante utilizando la GUI (GUI del teléfono) de mi teléfono en Android 5.0. Encontré una forma que necesita realizar una actividad que se utiliza para enviar alguna acción para abrir la GUI del teléfono. Tuve éxito al activar la GUI del teléfono para una llamada entrante. El problema es cómo puedo activar el altavoz para la GUI del teléfono. Probé el código pero no se enciende. ¿Podrías ayudarme a resolver ese problema en Android L?

audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.MODE_IN_CALL); if (!audioManager.isSpeakerphoneOn()) audioManager.setSpeakerphoneOn(true); audioManager.setMode(AudioManager.MODE_NORMAL);

Manifiesto

<uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />

Además, tenemos una forma más eficiente de abrir una llamada entrante utilizando la intención del teléfono de respuesta. Mi camino es tan largo porque usa una Actividad.

Este es mi código de clase completo

public class AcceptCallActivity extends Activity { private static final String MANUFACTURER_HTC = "HTC"; private KeyguardManager keyguardManager; private AudioManager audioManager; private CallStateReceiver callStateReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); } @Override protected void onResume() { super.onResume(); registerCallStateReceiver(); updateWindowFlags(); acceptCall(); } @Override protected void onPause() { super.onPause(); if (callStateReceiver != null) { unregisterReceiver(callStateReceiver); callStateReceiver = null; } } private void registerCallStateReceiver() { callStateReceiver = new CallStateReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED); registerReceiver(callStateReceiver, intentFilter); } private void updateWindowFlags() { if (keyguardManager.inKeyguardRestrictedInputMode()) { getWindow().addFlags( WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); } else { getWindow().clearFlags( WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); } } private void acceptCall() { // for HTC devices we need to broadcast a connected headset boolean broadcastConnected = MANUFACTURER_HTC.equalsIgnoreCase(Build.MANUFACTURER) && !audioManager.isWiredHeadsetOn(); if (broadcastConnected) { broadcastHeadsetConnected(false); } try { try { Log.d("AnswerCall","execute input keycode headset hook"); //Turn on speaker audioManager.setMode(AudioManager.MODE_IN_CALL); if (!audioManager.isSpeakerphoneOn()) audioManager.setSpeakerphoneOn(true); audioManager.setMode(AudioManager.MODE_NORMAL); Runtime.getRuntime().exec("input keyevent " + Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK)); } catch (IOException e) { // Runtime.exec(String) had an I/O problem, try to fall back Log.d("AnswerCall","send keycode headset hook intents"); String enforcedPerm = "android.permission.CALL_PRIVILEGED"; Intent btnDown = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra( Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HEADSETHOOK)); Intent btnUp = new Intent(Intent.ACTION_MEDIA_BUTTON).putExtra( Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); sendOrderedBroadcast(btnDown, enforcedPerm); sendOrderedBroadcast(btnUp, enforcedPerm); } } finally { if (broadcastConnected) { broadcastHeadsetConnected(false); } } } private void broadcastHeadsetConnected(boolean connected) { Intent i = new Intent(Intent.ACTION_HEADSET_PLUG); i.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); i.putExtra("state", connected ? 1 : 0); i.putExtra("name", "mysms"); try { sendOrderedBroadcast(i, null); } catch (Exception e) { } } private class CallStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { finish(); } } }


Me encontré con esta solución. Espero que te ayude.

int estática final FOR_MEDIA = 1;

int estático final FORCE_NONE = 0;

int estático final FORCE_SPEAKER = 1;

Class audioSystemClass = Class.forName ("android.media.AudioSystem");

Método setForceUse = audioSystemClass.getMethod ("setForceUse", int.class, int.class);

setForceUse.invoke (null, FOR_MEDIA, FORCE_SPEAKER);