【发布时间】:2019-01-07 13:35:49
【问题描述】:
使用唤醒锁
在设计播放媒体的应用程序时 背景,设备可能会在您的服务运行时进入睡眠状态。 因为 Android 系统会尝试节省电池,而设备 正在休眠,系统会尝试关闭手机的任何功能 那些不是必需的,包括 CPU 和 WiFi 硬件。 但是,如果您的服务正在播放或流式传输音乐,您希望 防止系统干扰您的播放。
那么,当我关闭屏幕时,为什么我的音频会继续播放?
Other answers 强化我的信念
如果您想在活动不在的情况下继续播放音乐 前台,你需要使用服务。
但我的手机没有停止播放音频。
请注意,我问这个问题是为了了解发生了什么,不是因为我想知道当屏幕变暗时我如何pause the music。
我没有使用服务,没有向我的清单添加"android.permission.WAKE_LOCK" 权限,并且正在 UI 线程中工作。 (为什么这首先不会导致 ANR,但 UI 似乎保持响应。)
Uri songUri = Uri.fromFile(new File(firstSong.getPath()));
try {
Timber.d("The following error messages regarding QCMediaPlayer can hopefully be safely ignored. See https://stackoverflow.com/questions/24501086/why-mediaplayer-throws-not-present-error-when-creating-instance-of-it");
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setLegacyStreamType(STREAM_MUSIC).build());
mediaPlayer.setDataSource(getApplicationContext(), songUri);
mediaPlayer.prepare(); // TODO: use prepareAsync instead
mediaPlayer.start();
} catch (IllegalArgumentException | IOException e){
Timber.w("File %s does not exist.", songUri);
}
mediaPlayer 的实例化实际上会导致 LogCat 中出现错误,但 I doubt it is relevant。反正就是这样:
E/ExtMediaPlayer-JNI: QCMediaPlayer could not be located....
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
E/ExtMediaPlayer-JNI: QCMediaPlayer could not be located....
E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0
【问题讨论】:
-
您是否尝试在 OnPause 方法中释放您的媒体播放器?
-
不,我没有。但是如果只暂停发布的媒体播放器,那么文档中提到的部分 WakeLock 根本不需要
标签: android