https://developer.android.google.cn/guide/topics/media/mediaplayer?hl=zh-cn
使用唤醒锁定
当设计在后台播放媒体内容的应用时,设备可能会在您的 Service 运行时进入休眠状态。由于 Android 系统尝试在设备处于休眠状态时节省电量,因此系统会尝试关闭手机上任何不必要的功能,包括 CPU 和 WLAN 硬件。不过,如果您的 Service 正在播放或流式传输音乐,则您需要防止系统干扰播放。
为了确保您的 Service 在这些情况下能继续运行,您必须使用“唤醒锁定”。唤醒锁定可以告诉系统:您的应用正在使用一些即使在手机处于闲置状态时也应该可用的功能。
注意:您应始终谨慎使用唤醒锁定,并只使其保留必要的时长,因为它们会显著缩短设备的电池续航时间。
为确保 CPU 在 MediaPlayer 播放时继续运行,请在初始化 时调用 setWakeMode() 方法。完成该操作后,MediaPlayer 会在播放时保持指定的锁定状态,并在暂停或停止播放时释放锁定:
mediaPlayer = new MediaPlayer();// ... other initialization here ...
mediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
不过,此示例中获取的唤醒锁定只能保证 CPU 保持唤醒状态。如果您使用 WLAN 并通过网络流式传输媒体内容,则您可能也希望保持 WifiLock,该锁定必须手动获取和释放。因此,当您开始使用远程网址准备 MediaPlayer 时,您应创建并获取 WLAN 锁定。例如:
WifiLock wifiLock = ((WifiManager) getSystemService(Context.WIFI_SERVICE)).createWifiLock(WifiManager.WIFI_MODE_FULL, "mylock");
wifiLock.acquire();
当您暂停或停止媒体内容,或者当您不再需要网络时,应释放该锁定:
wifiLock.release();