我有一个带音频播放的应用程序,但在某些设备(主要是华为,三星,索尼)上,当屏幕熄灭时播放停止.注意:对于Spotify,Play Music等其他应用,播放不会停止
我发现这个答案(对于华为设备)建议要求用户在电池优化设置(电池管理器>受保护的应用程序)中启用"后台运行"权限,但我想避免要求用户启用它.
是否有一些API可以为华为,三星,索尼或其他制造商提供编程方式?
是否可以检测应用程序是否没有此类权限?
编辑:播放在前台服务运行,应用程序持有唤醒锁
编辑2:我已经联系了与此问题相关的华为支持.一旦解决,我将分享更多信息.
我有一个应用程序可以选择下载文件.为此,我实现了DownloadService,它将首先进行数据库查询以获取下载候选者,然后构建队列以供下载.一旦构建了队列,它将开始逐个处理下载,直到队列为空,然后自己完成.当服务正在运行时,用户可以添加更多下载请求(将ACTION发送到正在运行的服务以重新构建队列).但是我们不再使用后台服务来定位Oreo或更新版本的Android,我希望避免将其作为前台服务实现,以避免在确定下载队列时显示通知而不进行实际的文件下载.
我试着schedule
它setOverrideDeadline(0)
使用JobScheduler
的API,但是,而不是更新正在运行的作业,旧的被破坏,而新的创造.我也试图enqueue JobWorkItem
替代,但onStartJob
中JobService
(其中,我应该出队工作)如果作业已在运行,所以我不能用新的请求更新它不叫.
编辑1:我有一个实验性实现,我将使用此示例代码检查我的JobService是否正在运行
private boolean isServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)){
if("com.example.MyJobService".equals(service.service.getClassName())) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果作业没有运行,我会安排它,但如果它正在运行,我将使用EventBus向此作业发送事件并使用新请求更新作业.但我更喜欢'纯'JobScheduler的API解决方案.
编辑2:我还可以选择并行下载多个文件并更改排队下载的优先级.
有人知道如何在不创建新JobScheduler
API的情况下继续向正在运行的作业发布新请求(操作)吗?(没有第三方图书馆)