- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近几年在 Android 上编程,我想知道一些事情:
如何检测耳机是否存在?
有一种方法:isWiredHeadsetOn()
但它不起作用。
我已经试过了,但它不起作用:
AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);
Log.i("am.isWiredHeadsetOn()", am.isWiredHeadsetOn() + "");
if (am.isWiredHeadsetOn()) {
//code
}
谢谢(如果我拼错了,我很抱歉,我是法国人)
最佳答案
@Phil 在 https://stackoverflow.com/a/19102661/4758255 回答是一个很好的检测耳机的实现。
这里我引用他的回答。 请为他的回答点赞,而不是这个!
为答案点赞:https://stackoverflow.com/a/19102661/4758255
三年来,我在商店里有一个应用程序可以同时监控有线耳机和蓝牙状态,而且从来没有人提示电池耗尽。但那是因为我成功地使用单个服务和广播接收器来检测来自两者的事件。这是两个关键类:
public class HeadsetStateBroadcastReceiver extends BroadcastReceiver {
public static final String[] HEADPHONE_ACTIONS = {
Intent.ACTION_HEADSET_PLUG,
"android.bluetooth.headset.action.STATE_CHANGED",
"android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED"
};
@Override
public void onReceive(final Context context, final Intent intent) {
boolean broadcast = false;
// Wired headset monitoring
if (intent.getAction().equals(HEADPHONE_ACTIONS[0]) {
final int state = intent.getIntExtra("state", 0);
AudioPreferences.setWiredHeadphoneState(context, state > 0);
broadcast = true;
}
// Bluetooth monitoring
// Works up to and including Honeycomb
if (intent.getAction().equals(HEADPHONE_ACTIONS[1])) {
int state = intent.getIntExtra("android.bluetooth.headset.extra.STATE", 0);
AudioPreferences.setBluetoothHeadsetState(context, state == 2);
broadcast = true;
}
// Works for Ice Cream Sandwich
if (intent.getAction().equals(HEADPHONE_ACTIONS[2])) {
int state = intent.getIntExtra("android.bluetooth.profile.extra.STATE", 0);
AudioPreferences.setBluetoothHeadsetState(context, state == 2);
broadcast = true;
}
// Used to inform interested activities that the headset state has changed
if (broadcast) {
LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("headsetStateChange"));
}
}
}
这是我用来注册广播接收器的服务:
public class HeadsetMonitoringService extends Service {
HeadsetStateBroadcastReceiver headsetStateReceiver;
@Override
public void onCreate() {
headsetStateReceiver = new HeadsetStateBroadcastReceiver();
final IntentFilter filter = new IntentFilter();
for (String action: HeadsetStateBroadcastReceiver.HEADPHONE_ACTIONS) {
filter.addAction(action);
}
registerReceiver(headsetStateReceiver, filter);
}
@Override
public int onStartCommand(final Intent intent, final int flags, final int startId) {
return START_STICKY;
}
@Override
public void onDestroy() {
unregisterReceiver(headsetStateReceiver);
}
@Override
public IBinder onBind(final Intent intent) {
return null;
}
}
这是我的 list 条目:
<service
android:name=".services.HeadsetMonitoringService"
android:enabled="true"
android:exported="false" >
<intent-filter>
<action android:name="initialiseHeadsetService" />
</intent-filter>
</service>
其工作原理如下:
我使用启动广播接收器向 HeadsetMonitoringService 发送启动服务消息(您不必以这种方式执行,您可以在应用程序启动时执行此操作)。 HeadsetMonitoringService 依次注册一个广播监听器实例,该监听器监听我感兴趣的所有耳机事件 - 它们保存在 HEADPHONE_ACTIONS 数组中。因为服务是粘性的,所以它会一直存在——广播监听器也是如此。但是因为服务和广播监听器都是事件驱动的,所以在耳机状态发生变化之前它们不会消耗任何电量。此外,由于该服务是粘性的,如果它意外死亡,它会被操作系统重新启动。
每当我收到耳机状态更改事件时,我也会触发本地广播,以便感兴趣的 Activity 可以检查新状态并在需要时采取行动。
为了完整起见,我应该指出我使用了另一个类(此处未显示)AudioPreferences 来存储蓝牙和有线耳机状态作为首选项,然后我可以在需要了解耳机状态时访问它。
如果您对蓝牙耳机的状态感兴趣,您的应用程序将需要 android.permission.BLUETOOTH 权限。如果没有,只需从 HEADPHONE_ACTIONS 数组中取出蓝牙相关的操作,并从 onReceive 方法中删除关联的 if block 。
关于android - 检测耳机安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29333340/
当我看到 Square 使用 iPhone 上的耳机插孔发送信用卡数据后,我对此产生了兴趣。 iPhone、普通笔记本电脑和普通移动设备上耳机插孔的平均带宽是多少? 可以通过在不同 channel
在Mango中是否可以检测是否已连接耳机?我想根据用户是否已连接耳机来更新一些UI元素。 (我真正需要的是耳机中的麦克风) 谢谢你的建议 最佳答案 没有可用的API提供此信息。 您将无法在您的应用中做
我试图让用户能够在应用程序中切换音频输出,并且能够使用AVAudioSession在扬声器和扬声器之间切换,但是在任何情况下我都找不到在连接的蓝牙设备和耳机之间切换的方法订购。 谢谢您的帮助。 最佳答
我运行的是 iOS 4.3.2。 我在我的 iPad 上启动我的应用程序(没有插入电源)。 音频作品。 我插入耳机。 没有音频,iPad 和耳机都没有。 我拔下耳机,转到 (2) 或者: 我在插入耳机
是否可以判断耳机是否已插入Windows Phone 8设备上? 我想使用Text to Speech API,但我不想通过扬声器阅读消息 最佳答案 实际上,是的,您可以使用WP8。这不是一个显而易见
使用AudioUnit和kAudioUnitSubType_HALOutput如何检测输出是Speaker还是Headset? 最佳答案 bool usingInternalSpeakers() {
我的目标: 从我的Android应用程序检测附近的所有蓝牙设备(电话,耳机等)。 这是developer.android.com中的一个很好的示例,该示例发现附近的蓝牙设备以及已配对的设备列表。 我的
如标题,我想知道如何获得我的 voip 应用程序的可用输出声音路径列表,或重现默认的 IOS 效果。此时我可以在用户调用电话时启用/禁用扬声器,但如果用户连接了蓝牙耳机,我希望用户可以选择使用哪条路由
我在使用 AudioRecord 类时遇到一些问题。我有一个应用程序可以在有人通过耳机收听音频时录制音频。在这种情况下,它工作正常。用户可以毫无问题地进行录制。任何使用内置麦克风耳机的用户都无法录音。
是否可以将 Ocullus Rift 或 HTC Vive 等 VR 设备连接到智能手机?我想为 Android 和 iOS 平台开发 VR 应用程序,但使用外部 VR 耳机,例如 Oculus Ri
有没有办法在 java 中获取设备(扬声器、耳机)的 GUID?我正在尝试修改注册表中的特定值,例如我需要这个键名 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wind
因此 iPhone 可以与蓝牙耳机配对并用它来调用电话(尽管使用 3.0 操作系统的 iPod Touch 无法与耳机配对,请看一下)。 但是我可以编写一个可以访问配对的蓝牙设备及其功能(例如耳机的麦
如何让服务监听 android 设备中的媒体按钮(耳机 Hook )。我尝试使用这段代码来做到这一点,但没有奏效。你能帮帮我吗。 服务代码: public class RLservice extend
想要的功能: 它类似于 iPhone 原生手机应用程序。当有蓝牙/耳机连接到 iPhone 时,扬声器按钮(通常只有扬声器/电话切换)将显示所有可用的音频输出设备。默认使用蓝牙。用户可以选择另一个设备
在我的 ipad 中,当我进入蓝牙设置页面时,我可以在已连接列表中看到我的三星耳机设备 (HM 1100)。但是,当我使用以下代码时,我无法获得任何配件。 NSArray *accessories =
我正在寻找一种方法来检测我的 VR 应用程序中使用的耳机名称。我需要区分 任务 1 & 2 为了实现不同的 Controller 映射。 XRDevice.model 或 OVRPlugin.prod
我有一些代码可以从相机捕捉镜头并输出拼接的 360 度视频。我可以将拼接视频输出为 MP4文件,RGBA文件,或 RGBA OpenGL纹理。 我需要以某种方式让我的代码将拼接的视频直播到 VR 耳机
我在 stackoverflow 中搜索我的问题的答案,我看到了很多信息,但我没有找到解决我的问题的方法。我尝试接收按钮诺基亚耳机蓝牙调用接收。 在 list 中我有:
我是一名优秀的程序员,十分优秀!