BroadcastReceiver用于拔下耳机

Sum*_*mit 8 android

嗨,我正在开发一个应用程序,当从手机中删除耳机时生成一个事件.我用接收方法创建了一个广播接收器

public void onReceive(Context context, Intent intent) {

        // TODO Auto-generated method stub
        String action = intent.getAction();
        Log.i("Broadcast Receiver", "Hello");
        if( (action.compareTo(Intent.ACTION_HEADSET_PLUG))  == 0)   //if the action match a headset one
        {
            int headSetState = intent.getIntExtra("state", 0);      //get the headset state property
            int hasMicrophone = intent.getIntExtra("microphone", 0);//get the headset microphone property
            if( (headSetState == 0) && (hasMicrophone == 0))        //headset was unplugged & has no microphone
            {

                    //do whatever
            }
        }           

    }
Run Code Online (Sandbox Code Playgroud)

调用此方法如下

 IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
        HeadSetBroadCastReceiver receiver = new HeadSetBroadCastReceiver();
        registerReceiver( receiver, receiverFilter );
Run Code Online (Sandbox Code Playgroud)

我也在清单中注册了这个

   <receiver android:name=".HeadsetBroadCastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.ACTION_HEADSET_PLUG"/>
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

和许可

但这不起作用,任何人都可以指导我通过这个吗?

小智 19

这是一个棘手的问题,但您可以使用BroadCast作为以下在您的活动中与我合作

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myReceiver = new HeadSetReceiver();
} 
Run Code Online (Sandbox Code Playgroud)

并在onResume()方法中注册您的广播

public void onResume() {
    IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
    registerReceiver(myReceiver, filter);
    super.onResume();
}
Run Code Online (Sandbox Code Playgroud)

然后在您的活动中声明您的BroadCast

private class HeadSetReceiver extends BroadcastReceiver {
    @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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

希望它的帮助,,,


Mar*_*k R 3

这里的问题是该广播设置了Intent.FLAG_RECEIVER_REGISTERED_ONLY标志。这意味着清单接收者不会捕捉到这一点。是完整的解释。