[headset]怎样解决插入耳机后等待2s时间才显示图标或者检测到耳机MIC类型

[headset]怎样解决插入耳机后等待2s时间才显示图标或者检测到耳机MIC类型

[DESCRIPTION]

经常有客户遇到插入耳机后差不多等待了2s时间才显示图标或者检测到耳机MIC类型

[SOLUTION]

出现这样的问题是由于定义了宏ACCDET_PIN_RECOGNIZATION
定义该宏后由于该宏设计的原因,会在文件
alps\kernel-3.10\drivers\misc\mediatek\accdet\MT6752\accdet.c
函数static inline void accdet_init(void)里面会调整耳机类型检测accdet中断
debounce time为2s。
// init the debounce time
#ifdef ACCDET_PIN_RECOGNIZATION
pmic_pwrap_write(ACCDET_DEBOUNCE0, cust_headset_settings->debounce0);
pmic_pwrap_write(ACCDET_DEBOUNCE1, 0xFFF
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android 13 中,"插入耳机后,内置喇叭被屏蔽"的逻辑在 system_server 进程中实现。具体来说,涉及到了 AudioManagerService 和 AudioPolicyService 两个服务,以下是相关代码及逻辑: 1. AudioManagerService.java ```java // 处理耳机插入和拔出事件 private void handleHeadsetEvent(boolean connected) { synchronized (mConnectedDevices) { // 更新当前连接的音频设备列表 updateAudioDeviceListLocked(); // 根据当前连接的音频设备列表,设置音频路由 updateRoutingStrategy(connected); } } // 更新当前连接的音频设备列表 private void updateAudioDeviceListLocked() { // 获取当前连接的音频设备列表 mConnectedDevices = mDeviceInventory.getDevices(); } // 根据当前连接的音频设备列表,设置音频路由 private void updateRoutingStrategy(boolean connected) { // 判断是否连接耳机 if (connected) { // 连接耳机时,将音频路由设置为耳机 mAudioPolicy.setWiredDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADSET, AudioSystem.DEVICE_STATE_AVAILABLE, "", ""); mAudioPolicy.setWiredDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE, AudioSystem.DEVICE_STATE_AVAILABLE, "", ""); } else { // 拔出耳机时,将音频路由设置为扬声器 mAudioPolicy.setWiredDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADSET, AudioSystem.DEVICE_STATE_UNAVAILABLE, "", ""); mAudioPolicy.setWiredDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE, AudioSystem.DEVICE_STATE_UNAVAILABLE, "", ""); } } ``` 上述代码中,AudioManagerService 服务中的 handleHeadsetEvent() 方法用于处理耳机插入和拔出事件。在事件处理过程中,首先通过 updateAudioDeviceListLocked() 方法更新当前连接的音频设备列表,然后根据当前连接的音频设备列表,使用 updateRoutingStrategy() 方法设置音频路由。如果插入耳机,就将音频路由设置为耳机,否则将音频路由设置为扬声器。 2. AudioPolicyService.java ```java // 设置音频路由策略 public synchronized void setWiredDeviceConnectionState(int type, int state, String address, String name) { // 更新当前连接的音频设备列表 updateDeviceConnectionState(type, state, address, name); // 根据当前连接的音频设备列表,更新音频路由策略 updateAudioRoutes(); } // 更新音频路由策略 private void updateAudioRoutes() { synchronized (mCurAudioRoutes) { // 根据当前连接的音频设备列表,设置音频路由策略 if (mDeviceInventory.isSourceActive(AudioSystem.DEVICE_IN_WIRED_HEADSET) || mDeviceInventory.isSourceActive(AudioSystem.DEVICE_IN_BLUETOOTH_A2DP)) { // 当有耳机或蓝牙 A2DP 设备连接时,将音频路由设置为耳机或蓝牙 A2DP 设备 mCurAudioRoutes.bluetoothName = mDeviceInventory.getDeviceName( AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP); mCurAudioRoutes.bluetoothAddress = mDeviceInventory.getDeviceAddress( AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP); mCurAudioRoutes.deviceType = AudioRoutesInfo.DEVICE_OUT_BLUETOOTH_A2DP; } else { // 当没有耳机或蓝牙 A2DP 设备连接时,将音频路由设置为扬声器 mCurAudioRoutes.deviceType = AudioRoutesInfo.DEVICE_OUT_SPEAKER; } // 更新音频路由策略 sendAudioRoutesChangedInternal(mCurAudioRoutes); } } ``` 上述代码中,AudioPolicyService 服务中的 setWiredDeviceConnectionState() 方法用于设置音频路由策略。在设置过程中,首先通过 updateDeviceConnectionState() 方法更新当前连接的音频设备列表,然后根据当前连接的音频设备列表,使用 updateAudioRoutes() 方法更新音频路由策略。如果有耳机或蓝牙 A2DP 设备连接,就将音频路由设置为耳机或蓝牙 A2DP 设备,否则将音频路由设置为扬声器。 总之,Android 13 中的"插入耳机后,内置喇叭被屏蔽"的逻辑主要是通过 AudioManagerService 和 AudioPolicyService 两个服务来实现的。具体实现方式可以参考上述代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值