You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

锁屏/睡眠模式下WiFi禁用致音频流应用播放10-15分钟中断

解决Android锁屏WiFi下音频流10-15分钟后停止的问题

我来帮你梳理下这个问题的核心原因和针对性解决办法——这在Android 8.0+设备上挺常见的,主要是系统后台限制、WiFi休眠策略以及厂商定制优化共同导致的,给你几个实操方案:

1. 升级音频服务为前台服务

Android 8.0+对后台服务的限制非常严格,普通后台服务很容易被系统回收。把你的音频播放服务设置为前台服务,能让系统认定它是用户正在关注的活跃任务,优先级大幅提升:

  • 给服务绑定一个带播放控制的通知栏(比如显示歌曲名、暂停/播放按钮),这是前台服务的强制要求;
  • 代码里通过startForeground()启动前台服务,示例如下:
    val notification = NotificationCompat.Builder(this, CHANNEL_ID)
        .setContentTitle("正在播放")
        .setContentText(currentSongName)
        .setSmallIcon(R.drawable.ic_music)
        .setStyle(androidx.media.app.NotificationCompat.MediaStyle())
        .build()
    startForeground(NOTIFICATION_ID, notification)
    

2. 锁定WiFi避免休眠

Android设备锁屏后,WiFi会默认进入低功耗模式,一段时间后自动断开连接,直接导致音频流中断。你可以通过WiFi锁来保持WiFi活跃:

  • 先在Manifest中申请权限:
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    
  • 播放开始时获取WiFi锁,停止时及时释放(避免过度耗电):
    WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    WifiLock wifiLock = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "AudioStreamWifiLock");
    // 播放启动
    if (!wifiLock.isHeld()) {
        wifiLock.acquire();
    }
    // 播放停止
    if (wifiLock.isHeld()) {
        wifiLock.release();
    }
    

3. 适配Doze模式与电池优化

Android 6.0+的Doze模式和App Standby会在设备静置时限制后台应用的网络和CPU使用,直接影响音频流:

  • 申请忽略电池优化权限,引导用户把你的应用加入白名单:
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
    
  • 代码中触发权限申请弹窗:
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val intent = Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
        intent.data = Uri.parse("package:$packageName")
        startActivity(intent)
    }
    

4. 适配厂商定制后台策略

像诺基亚、LG这类厂商的定制系统往往有自己的后台管理逻辑,可能会额外杀死后台应用:

  • 在应用内添加引导说明,告诉用户去系统设置中开启你的应用“后台运行权限”“自启动权限”;
  • 比如小米的“神隐模式”、华为的“启动管理”,都需要手动把应用设为“允许后台活动”。

额外注意点

  • 测试时务必关闭设备的省电模式,省电模式会进一步加剧后台限制;
  • 确保你的流媒体协议支持断点续传,万一网络断开后能自动恢复播放,降低用户感知。

内容的提问来源于stack exchange,提问作者Birk

火山引擎 最新活动