检测耳机是否插入Android设备。
如何确定耳机是否插入Android设备?
当你说“耳机”,你的意思是“有线耳机”? 如果是这样,有一个意图检测是否被插入或拔出: ACTION_HEADSET_PLUG
。
要检查状态,可以使用AudioManager.isWiredHeadsetOn()
,但如果还有蓝牙耳机,则返回false,并将audio路由到该位置。
您可以使用广播接收机。
所以,你可以在“AndroidManifest.xml”中编写这段代码
<receiver android:name="com.juno.brheadset.HeadsetStateReceiver"> <intent-filter> <action android:name="android.intent.action.HEADSET_PLUG"/> </intent-filter> </receiver>-->
但是,这是行不通的。 当操作系统发送这个“HEADSET_PLUG”意图时,操作系统设置标志“Intent.FLAG_RECEIVER_REGISTERED_ONLY”所以,你应该在Activity或Service类中写下如下的代码,而不是“AndroidManifest”的东西。
public class BRHeadsetActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG); HeadsetStateReceiver receiver = new HeadsetStateReceiver(); registerReceiver( receiver, receiverFilter ); }
我希望这篇文章能帮助你。 再见!
这是Android SDK Source的“HeadsetObserver.java”的一部分。
private final void sendIntent(int headset, int headsetState, int prevHeadsetState, String headsetName) { if ((headsetState & headset) != (prevHeadsetState & headset)) { // Pack up the values and broadcast them to everyone Intent intent = new Intent(Intent.ACTION_HEADSET_PLUG); **intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);** int state = 0; int microphone = 0; if ((headset & HEADSETS_WITH_MIC) != 0) { microphone = 1; } if ((headsetState & headset) != 0) { state = 1; } intent.putExtra("state", state); intent.putExtra("name", headsetName); intent.putExtra("microphone", microphone); if (LOG) Slog.v(TAG, "Intent.ACTION_HEADSET_PLUG: state: "+state+" name: "+headsetName+" mic: "+microphone); // TODO: Should we require a permission? ActivityManagerNative.broadcastStickyIntent(intent, null); } }
AudioManager.isWiredHeadsetOn()
总是返回false
因为它需要用户权限MODIFY_AUDIO_SETTINGS
。
我花了好几天的时间find答案。 在官方文档中没有关于这方面的信息。 而且这个bug
已经在BugTracker
注册了。
这应该可以帮助你: http : //developer.android.com/reference/android/content/Intent.html#ACTION_HEADSET_PLUG
- MediaCodec和Camera:颜色空间不匹配
- 无法将Android Wear模拟器与设备连接
- 需要实现Virgil Dobjanschi REST实现模式的示例Android REST Client项目
- 如何设置相机预览大小平方纵横比在平方SurfaceView(如Instagram)
- 将两个button设置为相同的宽度,而不考虑屏幕尺寸
- 在android中使用相机意图获取拍摄图像的path
- 在Android中使用URI生成器或使用variables创buildURL
- Android清除Clear Button的所有EditText字段
- “parsingdate:1302828677828”试图用Gson反序列化从服务器收到的一个毫秒格式的date