我不明白为什么我在按下后退按钮时会遇到此异常.我在onCreate方法中注册了IntentReceiver,它应该在onPause方法中取消注册.我在onPause方法内部的Log.w()调用让我相信正在调用unregisterReceiver()方法,但我仍然得到这个异常.
有什么想法吗?
private PlayerReceiver playerReceiver;
public void onCreate(Bundle savedInstanceState) {
...
IntentFilter playerFilter;
playerReceiver = new PlayerReceiver();
playerFilter = new IntentFilter(PlayerService.BUFFERING_FAILURE);
playerFilter.addAction(PlayerService.BUFFERING_SUCCESS);
registerReceiver(playerReceiver, playerFilter);
...
}
protected void onPause() {
...
if (playerReceiver != null){
unregisterReceiver(playerReceiver);
Log.w(TAG, "playerReceiver has been unregistered");
playerReceiver = null;
}
...
}
public class PlayerReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(PlayerService.BUFFERING_FAILURE)){
setListenButton(false);
}
closePlayDialog();
}
}
Run Code Online (Sandbox Code Playgroud)
LogCat输出
08-26 11:44:28.646: WARN/WWOZMain(1058): playerReceiver has been unregistered
08-26 11:44:29.476: ERROR/ActivityThread(1058): Activity org.wwoz.WWOZMain …Run Code Online (Sandbox Code Playgroud) 我正在尝试暂停拔下耳机时播放的音乐.
我创建了一个BroadcastReceiver,它侦听ACTION_HEADSET_PLUG意图,并在状态 extra为0(对于unplugged)时对它们进行操作.我的问题是,每当活动开始时,我的BroadcastReceiver都会收到ACTION_HEADSET_PLUG意图.这不是我期望的行为.我希望只有在插入耳机或拔下耳机时才会触发Intent.
有没有理由在使用该IntentFilter注册接收器后立即捕获ACTION_HEADSET_PLUG Intent?有没有明确的方法可以解决这个问题?
我认为,由于默认音乐播放器在拔下耳机时实现了类似的功能,因此可以实现.
我错过了什么?
这是注册码
registerReceiver(new HeadsetConnectionReceiver(),
new IntentFilter(Intent.ACTION_HEADSET_PLUG));
Run Code Online (Sandbox Code Playgroud)
这是HeadsetConnectionReceiver的定义
public class HeadsetConnectionReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Log.w(TAG, "ACTION_HEADSET_PLUG Intent received");
}
}
Run Code Online (Sandbox Code Playgroud) 我一直在为html5视频开发一套基于画布的视频控件.直到最近,一切都运作良好.一旦视频开始缓冲,我的'progress'事件的javascript事件监听器将更新画布擦除器.
最近,我升级了我的操作系统,最新版本的Chrome(15.0.874.106)似乎没有正确触发进度事件.它不会在视频完全加载之前触发,而是在很短的时间后停止发射.Firefox或以前版本的Chrome(12)中不存在此行为.
有什么东西我不见了吗?
这是我正在使用的测试代码:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<video id="main-player" preload="auto" controls>
<source src='video/atest.mp4' type='video/mp4' />
<source src='video/atest.webm' type='video/webm' />
<source src='video/atest.ogv' type='video/ogg' />
</video>
<script>
var player = document.getElementById('main-player');
player.addEventListener('progress', function(){
console.log('buffering: [duration: '+player.duration+'] [buffered: '+player.buffered.end(0)+']');
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
即使我完全删除了我的JS处理程序并且仅观察视频标记提供的擦除器,缓冲也会提前停止.