Volumen de auriculares de enlace de Android al volumen principal

Tengo un androide TV (Philips 49PUS6401) Quiero conectar un sistema de sonido envolvente a él que es mucho mejor calidad que los altavoces incorporados, incluso cuando sólo se utiliza en estéreo.

Sin embargo, este televisor separa el control de volumen de la salida master y la salida de los auriculares, y el resultado es que incluso con los altavoces de TV desconectados, las teclas de volumen del mando a distancia no ajustan el volumen de los auriculares fuera)

Estoy planeando escribir una aplicación sencilla para ajustar el volumen de los auriculares cada vez que se cambia el volumen del mástil, pero no puedo encontrar la forma de obtener o ajustar el volumen de los auriculares, ya que el administrador de audio se ocupa de los flujos en lugar de las salidas. El único valor que puedo obtener de él es el maestro.

¿Cómo puedo encontrar una forma de obtener / configurar el volumen de los auriculares? Tengo acceso de shell a través de adb, pero no puedo obtener root.

Para la referencia el tv está funcionando el último firmware, que es androide 5.1.1

Según entiendo, es un problema común de los usuarios de Philips para Android TV (por ejemplo, página 22 en este hilo o en esa discusión). En general, la plantilla para su tarea es el Service que el seguimiento de enchufe / desenchufar el evento y el volumen de "sistema / música" corriente de audio (o presionar el botón de medios) que hacer los cambios correspondientes en "auriculares con cable" de audio "stream" (no hay tal flujo En "estándar" de Android, pero obviamente algo así como el presente en "Android Philips" ) de nivel. El problema es que parece ser imposible cambiar el volumen de "wiredheadphones" nivel de flujo de audio con sólo Android SDK sin "Philips Android TV API" (probablemente no es un público).

El código fuente de la plantilla para "VolumeTrackingService" puede ser algo como esto:

 public class VolumeTrackingService extends Service { private static final String TAG = VolumeTrackingService.class.getSimpleName(); public static final String ACTION_START = "VolumeTrackingService.ACTION_START"; public static final String ACTION_STOP = "VolumeTrackingService.ACTION_STOP"; HeadsetPlugIntentReceiver mHeadsetPlugReceiver; private static boolean mHeadsetPlugged = false; private SettingsContentObserver mSettingsContentObserver; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); mHeadsetPlugReceiver = new HeadsetPlugIntentReceiver(); registerReceiver(mHeadsetPlugReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG)); mSettingsContentObserver = new SettingsContentObserver(new Handler()); getApplicationContext().getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, mSettingsContentObserver); } @Override public void onDestroy() { getApplicationContext().getContentResolver().unregisterContentObserver(mSettingsContentObserver); unregisterReceiver(mHeadsetPlugReceiver); super.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if (intent != null) { String actionRequested = intent.getAction(); if (ACTION_START.equals(actionRequested)) { } else if (ACTION_STOP.equals(actionRequested)) { stopSelf(); } } return START_STICKY; } private int getSystemVolumeInPercentage() { AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); final int streamVolumeMax = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); final int streamVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); return 100 * streamVolume / streamVolumeMax; } private void setHeadphonesVolume(int volumeInPercentage) { // there should be magic of wired headphones volume level changing } private void processVolumeChanges() { if (mHeadsetPlugged) { int systemVolumeInPercentage = getSystemVolumeInPercentage(); setHeadphonesVolume(systemVolumeInPercentage); } } public class SettingsContentObserver extends ContentObserver { public SettingsContentObserver(Handler handler) { super(handler); } @Override public boolean deliverSelfNotifications() { return super.deliverSelfNotifications(); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); if (mHeadsetPlugged ) { processVolumeChanges(); } } } public class HeadsetPlugIntentReceiver extends android.content.BroadcastReceiver { @Override public void onReceive(Context ctx, Intent intent) { if (intent.getAction().equals(android.media.AudioManager.ACTION_HEADSET_PLUG)) { mHeadsetPlugged = intent.getIntExtra("state", 0) == 1; } } } } 

Lamentablemente no resuelve el problema principal: cambiar el nivel de volumen de los auriculares con cable (probablemente es imposible sin "Philips Android TV API").

Pero si su sistema de sonido envolvente tiene control remoto Usted puede hacer alguna solución: emular los comandos de control remoto del sistema de sonido en el Service descrito anteriormente y enviarlo a través de un dongle de infrarrojos conectado a USB Host de su Philips 49PUS6401 Android TV.

  • Quitar SearchOrbView Android TV
  • ¿Cómo puedo comprobar si una aplicación se está ejecutando en un Android TV
  • Android TV (Leanback Launcher) - El teclado del desarrollador android no funciona
  • Detección de pantallas UHD de 4K en Android
  • Android Tv: obtener la lista de canales
  • Android TV: la imagen desenfocada contiene fondo transparente negro?
  • Implementación de un cuadro de diálogo de archivo en Android TV Leanback
  • Android TV ADT-1 adb puerto de conexión cambiado?
  • Proyecto AndroidStudio que admite Android y AndroidTV
  • Detectar el uso de Google Cast
  • Android TV no inicia actividad correcta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.