Android驅動學習-APP操作新硬件的兩種方法(支持添加的驅動)


在給Android添加新的驅動后,app要如何使用呢?

正常的使用一個設備,需要getService。但是像LED等我們自己添加的硬件驅動,Android源代碼根本沒有我們自己添加的服務。

第一種:

我們自己的創建的硬件設備驅動的類是被系統定義為了隱藏類,那么在Android系統中如何使用隱藏類呢?為此我們可以根據android的編譯過程可以看到我們添加的類被添加到framework.jar。但是framework.jar是dex格式,在我們做app時要使用原生態的jar目標文件.

所以我們使用 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/class.jar這個jar文件。

如何包含jar文件,我們可以Google。

第一步,把jar包放在工程下的libs目錄里,如果沒有就新建這個目錄。

第二步,通過File菜單或者F4進入project structure,先在左上方選擇+號,然后添加class.jar,然后左邊選中app,再進到dependencies,點 + 選擇file dependency ,再從libs目錄選擇你要的jar包,選擇后把 scope置為Provide。即可。
第二種:
通過反射來創建我們新建的類。也就是不用導入class.jar文件就能實現對我們自定義的類的創建和函數調用。
我個人的理解就是使用 Class.forName靜態函數,通過已知的函數名來實現對函數的調用。
 

Class.forName:返回與給定的字符串名稱相關聯接口的Class對象。

Class.forName是一個靜態方法,同樣可以用來加載類。該方法有兩種形式:Class.forName(String name, boolean initialize, ClassLoader loader)和 Class.forName(String className)。第一種形式的參數 name表示的是類的全名;initialize表示是否初始化類;loader表示加載時使用的類加載器。第二種形式則相當於設置了參數 initialize的值為 true,loader的值為當前類的類加載器。

static Class<?>

forName(String className)

Returns the Class object associated with the class or interface with the given string name.

static Class<?>

forName(String name, boolean initialize, ClassLoader loader)

Returns the Class object associated with the class or interface with the given string name, using the given class loader.

通過類名獲取類。

Class serviceManager = Class.forName("android.os.ServiceManager");

獲取方法

Method method = serviceManager.getMethod("getService", String.class);

調用方法

method.invoke(serviceManager.newInstance(), "phone");

 

()http://blog.csdn.net/fengyuzhengfan/article/details/38086743

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM