Android 手动按power键上锁,没有锁屏提示音,无法恢复【单机必现】

测试步骤

【测试版本】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再去播放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值