0、写在前面
没抢到小马哥的红包,无心回家了,回公司写篇文章安慰下自己TT。。话说年关难过,bug多多,时间久了难免头昏脑热,不辨朝暮,难识乾坤。。。艾玛,扯远了,话说谁没踩过坑,可视大家都是如何从坑里爬出来的呢?
1、实现个静音的功能
话说,有那么一天,
PM:『我这里有个需求,很简单很简单那种』
RD:『哦,需要做三天』
PM:『真的很简单很简单那种』
RD:『哦,你又说了一遍很简单,那么现在需要做六天了』
对呀,静音功能多简单,点一下,欸,静音了;再点一下,欸,不静音了;再点一下,欸。。。
我一看API,是挺简单的:
private void setMuteEnabled(boolean enabled){
AudioManager mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, enabled);
}
是吧,多简单,三分钟搞定。不过说真的,这并不是什么好兆头,太简单了,简单到令人窒息啊!
2、『您好,我是京东快递,您有一个bug签收一下』
话说,过了几天,
QA:『如果我先开启静音,然后退出我们的app再进来,尽管页面显示静音状态,但我无法取消静音啊』
RD:『一定是你的用法有问题!』
当然,我也挺心虚的啊,因为这段代码我总共花了三分钟,说有bug,我也不敢不信呐。我们再来细细把刚才的场景理一遍:
- 打开app,开启静音
- 点击返回键,直到app进入后台运行
- 重新点击app的icon,启动app,此时期望app中的静音按钮显示为静音开启的状态,并且点击可以取消静音。当然,实际上并不是这样 (|_|)
有个问题需要交代一下,Android api并没有提供获取当前音频通道是否静音的api(为什么没有?你。。你居然问我为什么?你为什么这么着急?往后看就知道啦),所以我在进入app加载view时,要根据本地存储的静音状态来初始化view的状态:
boolean persistedMute = mute.getContext().getSharedPreferences("volume", Context.MODE_PRIVATE).getBoolean("Volume.Mute", false);
muteButton.setChecked(persistedMute);
而这个字段是在用户点击了muteButton之后被存入SharedPreference当中的。
不可能啊,到这里毫无悬念可言啊,肯定是没有问题的呀。
接着看,这时候我们要取消静音了,调用的代码就是下面这段代码:
private void setMuteEnabled(boolean enabled){
AudioManager mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC, enabled);
}
然后,app一脸不屑的看都不看洒家一眼,依旧不吱声。
坑爹呢吧!!自行脑补我摔手机的场景
正是:自古bug多简单,惹得骚年尽难眠。