Android驱动学习-APP操作新硬件的两种方法(支持添加的驱动)

摘要:
在给Android添加新的驱动后,app要如何使用呢?但是像LED等我们自己添加的硬件驱动,Android源代码根本没有我们自己添加的服务。为此我们可以根据android的编译过程可以看到我们添加的类被添加到framework.jar。第一种形式的参数name表示的是类的全名;initialize表示是否初始化类;loader表示加载时使用的类加载器。第二种形式则相当于设置了参数initialize的值为true,loader的值为当前类的类加载器。

在给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的值为当前类的类加载器。

staticClass<?>

forName(StringclassName)

Returns theClassobject associated with the class or interface with the given string name.

staticClass<?>

forName(Stringname, booleaninitialize,ClassLoaderloader)

Returns theClassobject 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

免责声明:文章转载自《Android驱动学习-APP操作新硬件的两种方法(支持添加的驱动)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇easyuitabs(选项卡)Linux下Wi-Fi的实现:wireless_tools和wpa_supplicant下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

解决Flink消费Kafka信息,结果存储在Mysql的重复消费问题

背景 最近项目中使用Flink消费kafka消息,并将消费的消息存储到mysql中,看似一个很简单的需求,在网上也有很多flink消费kafka的例子,但看了一圈也没看到能解决重复消费的问题的文章,于是在flink官网中搜索此类场景的处理方式,发现官网也没有实现flink到mysql的Exactly-Once例子,但是官网却有类似的例子来解决端到端的仅一...

C#操作word模板

    string newDocFileName = Guid.NewGuid().ToString().Replace("-", "");        string strServerPath = Server.MapPath("") + "\\Model.doc";  //模板路径        string strSavePath = Serve...

asp.net简单实现利用HttpModule实现防sql注入

关于sql注入,已经被很多人讨论过了。这篇没有新意功能也不够通用,nnd,不想引起口水,就是觉得简单而且思路有参考性才贴出来。1、新建一个类,实现IHttpModule接口 代码     public class SqlHttpModule : IHttpModule    {        public void Dispose()        { ...

[爬虫]采用Go语言爬取天猫商品页面

最近工作中有一个需求,需要爬取天猫商品的信息,整个需求的过程如下: 修改后端广告交易平台的代码,从阿里上传的素材中解析url,该url格式如下: https://handycam.alicdn.com/slideshow/26/7ef5aed1e3c39843e8feac816a436ecf.mp4?content=%7B%22items%22%3A%5B...

ant Form 常用 api

经过 Form.create 包装的组件将会自带 this.props.form 属性,this.props.form 提供的 API 如下: 注意:使用 getFieldsValue getFieldValue setFieldsValue 等时,应确保对应的 field 已经用 getFieldDecorator 注册过了。 方法      说明...

java爬虫(四)利用Jsoup获取需要登陆的网站中的内容(无验证码的登录)

一、实现原理 登录之后进行数据分析,精确抓取数据。根据上篇文章的代码,我们不仅获取了cookies,还获取了登录之后返回的网页源码,此时有如下几种种情况:(1)若我们所需的数据就在登录之后返回的源码里面,那么我们就可以直接通过Jsoup去解析源码了,然后利用Jsoup的选择器功能去筛选出我们需要的信息;(2)若需要的数据是需要通过请求源码里的链接得到,那么...