您可以使用广播接收器。
因此,您可以在“ AndroidManifest.xml”中编写此代码
-->
但是,这不起作用。当OS发送此“ HEADSET_PLUG”意图时,OS设置标志“ Intent.FLAG_RECEIVER_located_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源代码“ 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);
}
}
本文介绍了如何在Android中正确处理HEADSET_PLUG意图。由于系统在发送该意图时设置了Intent.FLAG_RECEIVER_REGISTERED_ONLY标志,因此需要在Activity或Service中注册BroadcastReceiver,而非在AndroidManifest.xml中直接声明。提供了示例代码展示如何创建和注册HeadsetStateReceiver来监听耳机状态变化。
316

被折叠的 条评论
为什么被折叠?



