1 前言
播放时熄灭屏幕后重新亮屏,无法播放问题
2 现象
熄灭屏幕超过一段时间4s后,应用接收到熄灭屏幕广播,后续再接收到解锁广播
3 代码分析
private BroadcastReceiver mScreenReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (LOG) {
Log.v(TAG, "onReceive(" + intent.getAction() + ") mControlResumed="
+ mControlResumed);
}
if (Intent.ACTION_SCREEN_OFF.equals(intent.getAction())) {
if (mControlResumed) {
mPlayer.onStop();
mControlResumed = false;
}
} else if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())) {
if (!mControlResumed) {
mPlayer.onResume();
mControlResumed = true;
}
}
}
};
private void registerScreenReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);
registerReceiver(mScreenReceiver, filter);
}
默认播放器是监听的android.intent.action.SCREEN_OFF和android.intent.action.USER_PRESENT. 将监听的USER_PRESENT修改为SCREEN_ON,该问题就解决了。 但是不确定会不会有其他的问题,根据正常的逻辑来说应该是先亮屏后解锁,解锁后再开始播放。
4 方法
4.1 方法1---- 修改java代码中的接收广播
修改ACTION_USER_PRESENT为ACTION_SCREEN_ON——成功
4.2 方法2 ---- xml文件新增receiver
在xml文件中增加接收——失败
<receiver android:name="com.android.gallery3d.app.MovieActivity"
android:label="@string/movie_view_label"
android:configChanges="orientation|keyboardHidden|screenSize">
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
其中重点在于息屏之后该应用接收到了USER_PRESENT广播.
5 存疑
USER_PRESENT是什么时间发出的,具体代码在哪里,由哪个服务发出 为什么对于应用来说,解锁广播在熄灭屏幕广播之前。实际上从log来看,app接收到解锁广播之前,BatteryService接收到了熄灭屏幕广播
09-06 21:29:00.618 1297 1297 D BatteryService: onReceive: action = android.intent.action.SCREEN_OFF 09-06 21:29:00.636 3173 3173 V MovieActivity: onReceive(android.intent.action.USER_PRESENT) mControlResumed=true
6 参考文章
关于intent之android.intent.action.USER_PRESENT的接收与使用
|