FM bugs
96704 播放FM时,音量调节迟钝。
Log 看到FMPlay onKeyDown keyCode
定位代码,FMPlay.java onKeyDown,发现在KEYCODE_VOLUME_UP | KEYCODE_VOLUME_DOWN时,没做任何事情。
FMplayService stream type 7 value 3
fmradio value=3
FMplayService set volume3
FMPlay onKeyDown keyCode=24
FMplayService stream type 7 value 4
fmradio value=4
FMplayService set volume 4
FMplayService stream type 7 value 4
fmradio value=4
FMplayService set volume 4
一次按键,fmradio操作了3次,这是为什么?
根据LOG顺序,猜想fmradio也在监听音量按键消息。
AudioPolicyService
想起之前对FM的音量控制处理过,即在background的状态时,调用FM音量。
系统有个消息预处理机制,
frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java (2.2)
frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java (2.3.5)
handleVolumeKey(AudioManager.STREAM_FM, keyCode);
audioService.adjustStreamVolume(stream,...);
-------------------------------------------------------------------------------------------------------
bug 96617 在播放时,按<< 或 >> ,关闭,开启,显示118.9MHz
01-01 15:05:52.880: ERROR/fmradio(900): (getFreq)result=0 errno=0 freq=1189
区别就是(setFreq)freq=1189 或 879(其它)
01-01 15:05:52.930: ERROR/fmradio(900): (setFreq)freq=879 result=0 errno=0
底层fmradio代码,
grep fmradio -> frameworks/base/core/jni/android_hardware_fm.cpp (setFreq)
[frameworks/base/core/java/android/hardware/fmradio/FmReceiverJNI.java setFreqNative; FmRxControls.java FmReceiverJNI.setFreqNative(fd,mFreq)]
setFreqNative -> frameworks/base/core/java/android/hardware/fmradio/FmRxControls.java
mFreq -> setFreq(int f) -> FmTransceiver.java mControl.setFreq(frequencyKHz); ->
用在setStation中加LOG的方式,发现:
正常情况下开启时会调用FmTransceiver.java setStation 而BUG出现的情况下,没有调用
正常情况下开启时会调用FmRxControls.java setStation 而BUG出现的情况下,没有调用
FmTransceiver.java
protected FmRxControls mControl;
public boolean setStation(int freqencyKHz){
mControl.setFreq(frequencyKHz);
mControl.setStation(sFd);
return true;
}
FMplayService.java
import android.hardware.fmradio.FmReceiver;
private FmReceiver mReceiver = null;
setFreq mReceiver.setStation((int)(freq * TRANS_MULT));
-------
Log对比,发现FMPlay.java mHandler MSG_UPDATE freq获取时出错,是因为变量searchfreq

浙公网安备 33010602011771号