public class HeadsetIntentReceiver extends BroadcastReceiver {
private String TAG = "HeadSet";
public HeadsetIntentReceiver() {
Log.d(TAG, "Created");
}
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
int state = intent.getIntExtra("state", -1);
switch(state) {
case(0):
Log.d(TAG, "Headset unplugged");
break;
case(1):
Log.d(TAG, "Headset plugged");
break;
default:
Log.d(TAG, "Error");
}
}
}
}
这是我监听耳机插头的代码,我是从
Service
类启动的,但是每次插入和拔出它时,Logcat 上都没有显示任何内容,有什么想法吗?AndriodManifest.xml
<service android:name="com.jason.automator.HeadphoneJackListenerService" />
<receiver android:name=".HeadsetIntentReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.HEADSET_PLUG" />
</intent-filter>
</receiver>
最佳答案
如果您尚未在 list 中注册您的接收器,您可以执行以下操作
<receiver android:name=".HeadsetIntentReceiver" >
<intent-filter>
<action android:name="android.intent.action.HEADSET_PLUG" />
</intent-filter>
</receiver>
您也可以动态注册它。
当操作系统发送这个“HEADSET_PLUG” Intent 时,操作系统设置标志“Intent.FLAG_RECEIVER_REGISTERED_ONLY”。这就是为什么您的代码可能不起作用的原因。因此,尝试像下面那样在 Activity 或 Service 类中动态注册,而不是“AndroidManifest”。
所以试试下面的代码,
IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
HeadsetIntentReceiver receiver = new HeadsetIntentReceiver();
registerReceiver( receiver, receiverFilter );
关于android:耳机插头监听器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21625936/