Android TV屏保触发时直播流暂停问题求助
解决Android TV直播流被屏保打断的问题
仅声明
WAKE_LOCK权限无效,需主动获取唤醒锁
在播放直播的Activity或Service中,初始化PowerManager并获取对应唤醒锁:PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "MyApp:LiveStreamWakeLock"); // 直播开始时获取锁 wakeLock.acquire(); // 直播停止/页面销毁时释放锁 // wakeLock.release();注意:必须在合适时机释放唤醒锁,避免不必要的耗电。
添加窗口保活标志
在直播页面的Activity中,给窗口添加FLAG_KEEP_SCREEN_ON标志,这是更轻量的屏幕保持方案:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); // 其他初始化逻辑 }监听屏保广播并拦截
部分TV设备会强制启动屏保,可通过广播监听屏保启动事件,主动维持直播状态:- 注册广播接收器:
private BroadcastReceiver screensaverReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_SCREENSAVER_STARTED.equals(intent.getAction())) { if (wakeLock != null && !wakeLock.isHeld()) { wakeLock.acquire(); } } } }; // 在onCreate中完成注册 IntentFilter filter = new IntentFilter(Intent.ACTION_SCREENSAVER_STARTED); registerReceiver(screensaverReceiver, filter); - 在页面销毁时注销接收器并释放锁:
@Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(screensaverReceiver); if (wakeLock != null && wakeLock.isHeld()) { wakeLock.release(); } }
- 注册广播接收器:
调整播放生命周期逻辑
避免在ActivityonPause回调中暂停直播,仅在页面完全不可见时(如onStop或主动停止操作)处理暂停:@Override protected void onPause() { // 不在这里暂停直播 super.onPause(); } @Override protected void onStop() { if (isFinishing()) { player.pause(); } super.onStop(); }
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

