FM Volume
FM的音量调节跟音频服务(AudioService)有区别.
FmReceiverJNI.setControlNative(fd, V4L2_CID_AUDIO_VOLUME, value);
在frameworks/base/core/jni/android_hardware_fm.cpp中
android_hardware_fmradio_FmReceiverJNI_setControlNative
static int gVolume = 0;
static jint android_hardware_fmradio_FmReceiverJNI_setControlNative(...)
{
switch(id){
case V4L2_CID_AUDIO_VOLUME://调节音量
{
gVolume = value;
err = ioctl(fd, FM_IOCTL_SET_VOLUME, &value);
}
break;
case V4L2_CID_AUDIO_MUTE://开关音量
{
if(value == 0){
err = ioctl(fd, FM_IOCTL_SET_VOLUME, &gVolume); //SET (close)
} else {
int volume = -1;
err = ioctl(fd, FM_IOCTL_GET_VOLUME, &volume); //GET (open)
if(err >= 0){ // exist error
gVolume = volume; //get volume
volume = 0;
err = ioctl(fd, FM_IOCTL_SET_VOLUME, &volume); // set zero
}
}
}
}
frameworks/base/core/java/android/hardware/fmradio/FmReceiver.java
public boolean setVolume(int value)
-> FmRxControls.setVolume(sFd,value)
-> FmReceiverJNI.setControlNative(fd, V4L2_CID_AUDIO_VOLUME, value);
-> FmReceiverJNI.java public static native int setControlNative(int fd, int id, int value);

浙公网安备 33010602011771号