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/

10-09 06:55