V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
z1113456051
V2EX  ›  Android

有知道安卓 AudioDeviceInfo.TYPE_TELEPHONY 是什么设备的吗?

  •  
  •   z1113456051 · 2022-01-26 22:31:52 +08:00 · 8752 次点击
    这是一个创建于 1024 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直以来判断耳机都是 TYPE_WIRED_HEADSET 和 TYPE_WIRED_HEADPHONES 这两个类型,但是现在发现小米手机经常出现 TYPE_TELEPHONY 。

    类型注释是 A device type describing the transmission of audio signals over the telephony network.

    网上也找不到说具体是什么设备的。

    5 条回复    2022-01-27 11:55:41 +08:00
    AkaGhost
        1
    AkaGhost  
       2022-01-27 02:43:17 +08:00 via Android
    虽然没接触过 Android 开发,但是试着 Google 了下
    https://stackoverflow.com/questions/57822073/is-voice-call-recording-back-with-android-10-2019
    The call always receives audio. The app can capture audio if it is an accessibility service. The app can capture the voice call if it is a privileged (pre-installed) app with permission CAPTURE_AUDIO_OUTPUT.

    To capture the voice call's uplink (TX), downlink (RX), or both, the app must specify the audio sources MediaRecorder.AudioSource.VOICE_UPLINK or MediaRecorder.AudioSource.VOICE_DOWNLINK, and/or the device AudioDeviceInfo.TYPE_TELEPHONY.

    似乎和通话有关
    gam2046
        2
    gam2046  
       2022-01-27 10:56:10 +08:00
    show your code

    是通过什么方法,在什么场景下,获得了这样的返回值。
    z1113456051
        3
    z1113456051  
    OP
       2022-01-27 11:35:17 +08:00
    @gam2046

    我通过这个判断有线耳机的插入,但是小米用户反馈插入耳机无效,看日志,小米返回 TYPE_TELEPHONY 类型。

    我把 TYPE_TELEPHONY 加入了判断,就会有更多用户反馈没插耳机,但是进入了耳机模式。看来这个标志不插耳机的时候也会出现。

    开始怀疑是有什么互联互通的设备。但是联系用户就是 typec 转接头接耳机。不知道是不是有什么手机设置开启导致的。

    AudioDeviceInfo[] devices = audioManager.getDevices(GET_DEVICES_OUTPUTS);

    for (int i = 0; i < devices.length; i++) {
    AudioDeviceInfo deviceInfo = devices[i];
    Log.e("", "devices[" + i + "].getId = " + deviceInfo.getId() + ", getType = " + deviceInfo.getType()");

    if (deviceInfo.getType() == AudioDeviceInfo.TYPE_WIRED_HEADSET
    || deviceInfo.getType() == AudioDeviceInfo.TYPE_WIRED_HEADPHONES) {
    return true;
    }
    }
    z1113456051
        4
    z1113456051  
    OP
       2022-01-27 11:45:15 +08:00
    @wyf001912hp 我也查过了,看起来像是通话录音相关。
    gam2046
        5
    gam2046  
       2022-01-27 11:55:41 +08:00
    @z1113456051 #3 ,唔,是否尝试过通过接受 AudioManager.ACTION_HEADSET_PLUG 广播来获得相关信息,这是 Android 推荐的方法。

    另外一种比较 hack 的方法,是我从 aosp 源代码里翻到的,不太推荐,由于我开发的不是常规的 Android App ,没有 Context 对象,才采用了这个方法,绕过高版本 Android 对非公开 API 调用的检查后,调用这样的代码

    https://imgtu.com/i/7X1fxS

    Anyways ,推荐优先尝试广播的方式获取
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:51 · PVG 20:51 · LAX 04:51 · JFK 07:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.