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);