替代已弃用的 AudioManager.isWiredHeadsetOn?
Posted
技术标签:
【中文标题】替代已弃用的 AudioManager.isWiredHeadsetOn?【英文标题】:Alternative to the deprecated AudioManager.isWiredHeadsetOn? 【发布时间】:2013-01-02 07:43:44 【问题描述】:方法AudioManager.isWiredHeadsetOn()从api级别14被弃用,我们现在如何检测是否连接了有线耳机?
【问题讨论】:
【参考方案1】:这是我的解决方案:
private boolean isHeadsetOn(Context context)
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
if (am == null)
return false;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
return am.isWiredHeadsetOn() || am.isBluetoothScoOn() || am.isBluetoothA2dpOn();
else
AudioDeviceInfo[] devices = am.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
for (AudioDeviceInfo device : devices)
if (device.getType() == AudioDeviceInfo.TYPE_WIRED_HEADSET
|| device.getType() == AudioDeviceInfo.TYPE_WIRED_HEADPHONES
|| device.getType() == AudioDeviceInfo.TYPE_BLUETOOTH_A2DP
|| device.getType() == AudioDeviceInfo.TYPE_BLUETOOTH_SCO)
return true;
return false;
【讨论】:
isWiredHeadsetOn
和 isBluetoothA2dpOn
的弃用来自 API 14。在 14 和 M (23) 之前应该做什么?我认为这里的文档也很奇怪,所以我写了这个:issuetracker.google.com/issues/111788828。无论如何,预计这种解决方法可以很好地接受电话:***.com/a/29651130/878126(替换isWiredHeadsetOn
)?
也许你要扩展你的解决方案,文档说TYPE_WIRED_HEADSET:描述耳机的设备类型,它是耳机和麦克风的组合。 developer.android.com/reference/android/media/…【参考方案2】:
文档的弃用消息指出:
仅用于检查是否连接了耳机。
所以我想继续使用它来检查是否连接了有线耳机是可以的,但不能检查音频是否正在路由到它或通过它播放。
【讨论】:
我想答案就这么简单。我发现弃用一个方法很令人困惑,如果它没有真正被弃用,它只是稍微改变了目的。不管怎样,谢谢。 :)【参考方案3】:试试这个解决方案。它在我的情况下工作。可能对你有帮助!
IntentFilter iFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
Intent iStatus = context.registerReceiver(null, iFilter);
boolean isConnected = iStatus.getIntExtra("state", 0) == 1;
【讨论】:
但这不会告诉您在启动应用之前插入耳机时的耳机状态。【参考方案4】:它对我很有效:
if(context.registerReceiver(null, new IntentFilter(Intent.ACTION_HEADSET_PLUG)).getIntExtra("state", 0)==1)
//if(audioManager.isWiredHeadsetOn())
System.out.println("Headset is wiredOn");
else
System.out.println("Headset is not wiredOn");
【讨论】:
【参考方案5】:IntentFilter iFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
Intent iStatus = context.registerReceiver(null, iFilter);
boolean isConnected = iStatus.getIntExtra("state", 0) == 1;
我知道这段代码可以在哪个andorid平台版本上使用。 它不适用于我在 Android 8 上。 结果 iStatus 为空。
【讨论】:
【参考方案6】:我们必须使用广播接收器来查找蓝牙连接的状态。
这是一个很好的example
【讨论】:
以上是关于替代已弃用的 AudioManager.isWiredHeadsetOn?的主要内容,如果未能解决你的问题,请参考以下文章
替代已弃用的 AudioManager.isWiredHeadsetOn?
已弃用的 AudioManger.setStreamMute 的替代方案?
已弃用的 NSURLConnection 方法,有替代方法吗?
已弃用的 google plus api 的替代解决方案是啥?