Java 接收耳机的拔出时间过长

Java 接收耳机的拔出时间过长,java,android,broadcast,headset,Java,Android,Broadcast,Headset,我想在用户拔下耳机时暂停MediaPlayer。我发现我可以使用“动作音频变得嘈杂”广播,所以我尝试了一下 理论上它是有效的,但是接收的时间太长了。音乐在真正暂停前仍在播放3-5秒。这对用户来说是不可接受的 其他开发人员如何能够在毫秒内暂停它?有更好的解决方案吗 我的BroadcastReceiver实际上用于通知: public class NotificationBroadcast extends BroadcastReceiver { ... @Override public void

我想在用户拔下耳机时暂停MediaPlayer。我发现我可以使用
“动作音频变得嘈杂”
广播,所以我尝试了一下

理论上它是有效的,但是接收的时间太长了。音乐在真正暂停前仍在播放3-5秒。这对用户来说是不可接受的

其他开发人员如何能够在毫秒内暂停它?有更好的解决方案吗

我的BroadcastReceiver实际上用于通知:

public class NotificationBroadcast extends BroadcastReceiver {

...

@Override
public void onReceive(Context context, Intent intent) {

    if (intent.getAction().equals(android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {

        Intent iPause = new Intent(context , SongService.class);
        iPause.putExtra("com.Hohos.mplay.Services.SongService.MEDIA_ACTION", NOTIFY_EXTRA_PAUSE);
        context.startService(iPause);
    }

...
}
我还添加了
,这真的没什么区别


谢谢你们的帮助,伙计们

要知道用户何时拔下耳机,您需要收听操作并检查
状态
额外:

广播动作:插入或拔出有线耳机

意图将具有以下额外值:

  • 状态-0表示已拔出,1表示已插入
  • 名称-耳机类型,人类 可读字符串
  • 麦克风-1如果耳机有麦克风,则为0 否则
这是一个例子:

public class MainActivity extends Activity {

    private HeadsetBroadcastReceiver mHeadsetBroadcastReceiver;

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myReceiver = new HeadsetBroadcastReceiver();
    }

    @Override 
    protected void onResume() {
        IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
        registerReceiver(mHeadsetBroadcastReceiver, filter);
        super.onResume();
    }

    @Override 
    protected void onPause() {
        unregisterReceiver(mHeadsetBroadcastReceiver);
        super.onPause();
    }

    private class HeadsetBroadcastReceiver extends BroadcastReceiver {
        @Override 
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
                int state = intent.getIntExtra("state", -1);

                if (state == 0) {
                    //Headset is unplugged
                } else if(state == 1) {
                    //Headset is plugged
                }
            }
        }
    }
}

要知道用户何时拔下耳机,您需要听操作并检查
状态
额外:

广播动作:插入或拔出有线耳机

意图将具有以下额外值:

  • 状态-0表示已拔出,1表示已插入
  • 名称-耳机类型,人类 可读字符串
  • 麦克风-1如果耳机有麦克风,则为0 否则
这是一个例子:

public class MainActivity extends Activity {

    private HeadsetBroadcastReceiver mHeadsetBroadcastReceiver;

    @Override 
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myReceiver = new HeadsetBroadcastReceiver();
    }

    @Override 
    protected void onResume() {
        IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
        registerReceiver(mHeadsetBroadcastReceiver, filter);
        super.onResume();
    }

    @Override 
    protected void onPause() {
        unregisterReceiver(mHeadsetBroadcastReceiver);
        super.onPause();
    }

    private class HeadsetBroadcastReceiver extends BroadcastReceiver {
        @Override 
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
                int state = intent.getIntExtra("state", -1);

                if (state == 0) {
                    //Headset is unplugged
                } else if(state == 1) {
                    //Headset is plugged
                }
            }
        }
    }
}

谢谢你的帮助,但不知怎的,我没有得到广播。我在接收方的意向过滤器中使用了“”,并使用了权限“”。为什么我不能得到一个广播?(我还调试了它)好的,我发现我必须动态注册它。所以这不能通过清单注册来实现。谢谢你,马蒂亚!谢谢你的帮助,但不知怎的,我没有得到广播。我在接收方的意向过滤器中使用了“”,并使用了权限“”。为什么我不能得到一个广播?(我还调试了它)好的,我发现我必须动态注册它。所以这不能通过清单注册来实现。谢谢你,马蒂亚!