Java 接收耳机的拔出时间过长
我想在用户拔下耳机时暂停MediaPlayer。我发现我可以使用Java 接收耳机的拔出时间过长,java,android,broadcast,headset,Java,Android,Broadcast,Headset,我想在用户拔下耳机时暂停MediaPlayer。我发现我可以使用“动作音频变得嘈杂”广播,所以我尝试了一下 理论上它是有效的,但是接收的时间太长了。音乐在真正暂停前仍在播放3-5秒。这对用户来说是不可接受的 其他开发人员如何能够在毫秒内暂停它?有更好的解决方案吗 我的BroadcastReceiver实际上用于通知: public class NotificationBroadcast extends BroadcastReceiver { ... @Override public void
“动作音频变得嘈杂”
广播,所以我尝试了一下
理论上它是有效的,但是接收的时间太长了。音乐在真正暂停前仍在播放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
}
}
}
}
}
谢谢你的帮助,但不知怎的,我没有得到广播。我在接收方的意向过滤器中使用了“”,并使用了权限“”。为什么我不能得到一个广播?(我还调试了它)好的,我发现我必须动态注册它。所以这不能通过清单注册来实现。谢谢你,马蒂亚!谢谢你的帮助,但不知怎的,我没有得到广播。我在接收方的意向过滤器中使用了“”,并使用了权限“”。为什么我不能得到一个广播?(我还调试了它)好的,我发现我必须动态注册它。所以这不能通过清单注册来实现。谢谢你,马蒂亚!