測试步骤

【測试版本号】T0606

【模块版本号】

NAVI锁屏:5.0.0.ck

【測试步骤】

1、手动按power键上锁,

【測试结果】

没有锁屏提示音,无法恢复【单机必现】

【预期结果】

有提示音

【发生次数】

单机必现

从log能够找到

4321 05-25 16:58:23.779 886 32501 W SoundPool: sample 1 not READY

7641 05-25 16:58:33.879 886 32563 W SoundPool: sample 1 not READY

10835 05-25 16:58:42.550 886 32619 W SoundPool: sample 1 not READY

14300 05-25 16:58:53.021 886 32679 W SoundPool: sample 1 not READY

17733 05-25 16:59:02.343 886 32737 W SoundPool: sample 1 not READY

21173 05-25 16:59:12.912 886 332 W SoundPool: sample 1 not READY

24266 05-25 16:59:19.413 886 397 W SoundPool: sample 1 not READY

27374 05-25 16:59:25.650 886 456 W SoundPool: sample 1 not READY

30833 05-25 16:59:32.635 886 557 W SoundPool: sample 1 not READY

34121 05-25 16:59:41.375 886 616 W SoundPool: sample 1 not READY

37447 05-25 16:59:49.593 886 787 W SoundPool: sample 1 not READY

40340 05-25 16:59:58.792 886 888 W SoundPool: sample 1 not READY

43666 05-25 17:00:05.802 886 1015 W SoundPool: sample 1 not READY

播放失败的原因

解决方式:

改动文件:frameworks/av/media/libmedia/SoundPool.cpp

int SoundPool::play(int sampleID, float leftVolume, float rightVolume,
int priority, int loop, float rate)
{
ALOGV("play sampleID=%d, leftVolume=%f, rightVolume=%f, priority=%d, loop=%d, rate=%f",
sampleID, leftVolume, rightVolume, priority, loop, rate);
sp<Sample> sample;
SoundChannel* channel;
int channelID; Mutex::Autolock lock(&mLock); if (mQuit) {
return 0;
}
// is sample ready? sample = findSample(sampleID);
//2015.06.06 add for begin
if(sample != 0){
int LoopCounter = 15;
while(LoopCounter-- > 0 && (sample->state() != Sample::READY)){
ALOGD("wait for sample ready, sleep 150ms");
usleep(150 * 1000);
}
}
//2015.06.06 add for end
if ((sample == 0) || (sample->state() != Sample::READY)) {
ALOGW(" sample %d not READY", sampleID);
return 0;
} dump(); // allocate a channel
channel = allocateChannel_l(priority); // no channel allocated - return 0
if (!channel) {
ALOGV("No channel allocated");
return 0;
} channelID = ++mNextChannelID; ALOGV("play channel %p state = %d", channel, channel->state());
channel->play(sample, channelID, leftVolume, rightVolume, priority, loop, rate);
return channelID;
}

假设载入线程还没有准备好sample->state() != Sample::READY。等待2.25s再去播放

Android 手动按power键上锁,没有锁屏提示音,无法恢复【单机必现】的更多相关文章

  1. Android Device Administration 设备管理器——实现一键锁屏

    Android Device Administration 设备管理器--实现一键锁屏 最近研究了一下安全这一块的内容,当然,我是比较水的,所以也拿不出什么好知识点,但是有一些冷门的东西我还是可以聊聊 ...

  2. Android Framework层Power键关机流程(二,关机流程)

    二,关机流程 从前一篇博文我们知道,当用户长按Power键时会弹出(关机.重启,飞行模式等选项)对话框,我们点击关机,则会弹出关机确认对话框.那么从选项对话框到关机确认对话框又是一个什么流程呢.下面我 ...

  3. Android Framework层Power键关机流程(一,Power长按键操作处理)

    一:Android处理Power按键长按操作 在Framework层中,Android4.x对Power键(KeyEvent.KEYCODE_POWER)的操作,我们从PhoneWindowManag ...

  4. Android 手动调用 返回键

    有人想通过下面代码来实现手动调用返回键,很可惜会出现空指针异常. this.onKeyDown(KeyEvent.KEYCODE_BACK, null); 我们可以通过调用 onBackPressed ...

  5. Android 7.0 以上保留数据去除锁屏密码的方法

    在很多情况下,由于我们的疏忽,导致忘记了锁屏密码.也没有开启 USB 调试,内置存储中还有要保留的数据.我们需要在不清除数据的情况下删除锁屏密码.接下来我们就介绍该如何做. 注意事项 首先要注意,这个 ...

  6. 【Android N 7.1.1】 处于锁屏界面时可以转屏

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.ja ...

  7. 手动ubuntu 18.04修改登录锁屏界面效果(含登录背景修改)flat-remix

    前言 在ubuntu 18.04,可以通过修改/etc/alternatives/gdm3.css来进行修改 本来想直接使用flat-remix主题,但是只有这个登录界面没有达到作者演示的效果,所以手 ...

  8. 【Mac使用系列】Mac锁屏及快捷键

    mac锁屏办法,我有所尝试,可用系统自带锁屏快捷键:Ctrl + Command + Q或者参考方法2,直接设置TouchBar. 这两种办法,亲测可用.我直接设置了TouchBar,锁屏解锁离得很近 ...

  9. Android 触摸提示音【转】

    本文转载自:http://blog.csdn.net/Jin_HeZai/article/details/46791567 近期任务,涉及Android触摸提示音. 首先,定位源码目标.很显然的,在原 ...

随机推荐

  1. gif处理

    UleadGIFAnimator-v5.05破解版 网盘地址:https://pan.baidu.com/s/1bpf6iVP 2017-02-19  10:39:58

  2. **PHP foreach 如何判断为数组最后一个最高效?

    http://www.zhihu.com/question/20158667 其他方法: $list = array('a', 'b', 'c'); foreach($list as $k=>$ ...

  3. WebAssembly 介绍

    http://blog.csdn.net/zhangzq86/article/details/61195685 WebAssembly 的出现是不是意味着 Javascript 要完? https:/ ...

  4. InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移

    系列目录 InterSystems Ensemble学习笔记(一) Ensemble介绍及安装InterSystems Ensemble学习笔记(二) Ensemble创建镜像, 实现自动故障转移 一 ...

  5. 【LOJ】#2032. 「SDOI2016」游戏

    题解 看错题了,以为单次修改相当于一个覆盖,后来才明白"添加"-- 就相当于添加很多线段求最小值 首先这个等差数列添加的方式比较烦人,我们拆开两条链,一条s到lca,一条lca到t ...

  6. Django实战(14):让页面联动起来

    上一节我们实现了一个”能看不能用“的购物车,现在我们来使用这个购物车. 首先是产品目录界面中的”加入购物车“链接,我们希望点击这个按钮后,在购物车中添加该产品(添加的规则是如果购物车中已经有该产品就增 ...

  7. shell script执行的几种方式

    编写一个shell脚本test.sh,内容如下 a='测试执行方式' echo $a 方式1 使用路径的方式执行 chmod a+x test.sh ./test.sh 执行结果如下 当脚本执行之后, ...

  8. HDU - 1051 Wooden Sticks 贪心 动态规划

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)    ...

  9. JS 常用库汇总收集

    本文不定期更新, 用于汇总记录一些看着 ok 的 JS 库. 库名 简介 项目地址 macy.js 仅 4 kb的 原生 流布局插件 http://macyjs.com/ Driver.js 仅 4 ...

  10. [BZOJ5292][BJOI2018]治疗之雨(概率DP+高斯消元)

    https://blog.csdn.net/xyz32768/article/details/83217209 不难找到DP方程与辅助DP方程,发现DP方程具有后效性,于是高斯消元即可. 但朴素消元显 ...