Android链接耳机音量到主音量

Android链接耳机音量到主音量,第1张

概述我有一台安卓电视(飞利浦49PUS6401) 我想连接一个环绕声系统,它比内置扬声器质量好得多,即使只用于立体声. 然而,这台电视分离主输出和耳机输出的音量控制,结果是即使关闭电视扬声器,遥控器上的音量键也不会调整耳机音量(我用作线路出) 我打算写一个简单的应用程序,以便在桅杆音量改变时调整耳机音量,但我似乎无法弄清楚如何获取或设置耳机音量,因为音频管理器处理流而不是输出,所以我能从中得到的唯一价 我有一台安卓电视(飞利浦49PUS6401)
我想连接一个环绕声系统,它比内置扬声器质量好得多,即使只用于立体声.

然而,这台电视分离主输出和耳机输出的音量控制,结果是即使关闭电视扬声器,遥控器上的音量键也不会调整耳机音量(我用作线路出)

我打算写一个简单的应用程序,以便在桅杆音量改变时调整耳机音量,但我似乎无法弄清楚如何获取或设置耳机音量,因为音频管理器处理流而不是输出,所以我能从中得到的唯一价值就是主人.

如何找到获取/设置耳机音量的方法?
我通过adb获得了shell访问权限,但我无法获得root权限.

作为参考,电视正在运行最新的固件,这是Android 5.1.1

解决方法 据我所知,这是飞利浦AndroID TV用户的常见问题(例如 this篇中的第22页,或 that讨论).
一般来说,您的任务的模板是跟踪插入/拔出事件和“系统/音乐”音频流(或媒体按钮按下)的音量的服务,而不是对“有线耳机”音频“流”进行相应的更改(没有这样的流在“标准”AndroID中,但显然
类似于 “Android Philips”级别的东西.问题是,似乎不可能只使用没有“飞利浦AndroID TV API”的AndroID SDK来改变音量“有线耳机”音频流级别(可能它不是公共的).

“VolumeTrackingService”的模板源代码可能是这样的:

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;            }        }    }}

不幸的是,它没有解决主要问题:改变有线耳机的音量水平(如果没有“飞利浦AndroID TV API”,可能是不可能的).

但是如果你的环绕声系统有遥控器你可以做一些解决方法:在上述服务中模拟音响系统遥控器命令,并通过连接到飞利浦49PUS6401 AndroID TV的USB主机的红外加密狗发送.

总结

以上是内存溢出为你收集整理的Android链接耳机音量到主音量全部内容,希望文章能够帮你解决Android链接耳机音量到主音量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1138831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存