说明:第一版架构为:APP+JNI(NDK)+Driver(linux),优点是开发简单,周期短,也作为自己的毕业设计
现在更新第二版,FM服务完全植入Android系统中,成为系统服务,架构为:APP+Frameworks+JNI+HAL+Driver
整个系统设计,大致分为三篇文章介绍完毕,包括:
一、驱动设计篇
二、系统API接口篇
三、APP功能实现篇
---------------------------------------------------(三)APP设计篇-----------------------------------------------------------------
前两篇文章介绍了底层是怎么实现的,现在终于可以和用户进行交互了
这里暂时只介绍调用底层API的方法,具体实现后续再补充...
1.导包
1 import android.os.ServiceManager; 2 import android.os.IFMService;
2.获取系统的FM服务
1 private IFMService fmService = null; 2 fmService = IFMService.Stub.asInterface(ServiceManager.getService("fm5767"));
3.调用底层服务,如获取当前频率
int curFreq = fmService.getFreq();
我们可以用同样的方式调用其他的API,API的查阅在frameworks/base/core/java/android/os/IFMService.aidl文件中
1 package android.os; 2 3 interface IFMService { 4 int getADC(); 5 int getFreq(); 6 void setFreq(int freq); 7 void searchNextorPreFreq(int enable); 8 void setNextorPreFreq(int enable); 9 void enableMute(int enable); 10 int getIsMute(); 11 void startAutoSearch(); 12 }
4.由于我们在系统中自行添加了API,所以最好编译APP是放在系统源码里进行编译,使用mm命令即可
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PACKAGE_NAME := FmRadio LOCAL_PROGUARD_FLAG_FILES := proguard.flags include $(BUILD_PACKAGE) # Use the folloing include to make our test apk. include $(call all-makefiles-under,$(LOCAL_PATH))
github上的代码暂时是APP->JNI(NDK)->Driver架构的,后续会更新...欢迎大家指出错误与不足指出,非常感谢~~
完整工程代码下载: