1、前面的例子中App为了能够范问ILedService接口,把classes.jar导入到应用程序中,但是我们不想把classes编进apk包里面去,这样导致我们的apk程序会很大(解压缩apk会发现里面有classes.dex和classes2.dex这两个优化后的包)

因此这里修改编译选项:

在Android studio中

file->Project Structure->点击左边我们的app->点击右边的Dependencies,找到下面的classes,其Scope列表中的值改为Provided

2、app应用程序如何使用反射来访问硬件服务,已之前写的app为例

A、去掉import android.os.ILedService和import android.os.ServiceManager,同时新增import android.os.IBinder

B、在类中新增变量:Object proxy ;Method lec_ctrl

C、去掉iLedService =ILedService.stub.asInterface(ServiceManager.getService("led")); 并使用反射来实现该功能:

  Method getService = Class.forName("android.os.ServiceManager").getMethod("getService",String.class)//getService的第一个参数是获得的方法名字

  Object ledService = getService.invoke(null,"led")//第一个参数应该是实例化对象,但是getService方法是static的,所有不用实例化对象,‘led’就是getService的参数,invoke虽然是调用ledService函数,这个函数返回IBinder对象,但invoke返回的是Object,这个IBinder会向上转化为Object

  //IBinder ledService = (IBinder)getService.invoke(null,"led");//功能同上面一句

  /*到这里为止已经实现了ServiceManager.getService("led")的功能*/

  Method asInterface= Class.forName("android.os.ILedService$Stub").getMethod("asInterface",IBinder.class);//这里的“$”表示子类

  proxy = asInterface.invoke(null,ledService );//asInterface方法返回的是个Proxy对象,代码里面没有声明,所有这里使用父类Object来接收,

  /*这里为止我们实现了iLedService =ILedService.stub.asInterface(ServiceManager.getService("led"));功能*/

  /*下面我们来获得类Proxy里面的led_ctrl函数*/

  lec_ctrl= Class.forName("android.os.ILedService$Stub$Proxy").getMethod("led_ctrl",int.class,int.class);

  /*使用led_ctrl来点灯*/

   lec_ctrl.invoke(proxy ,0,1);

  接着我们就可以在app中使用Proxy类型对象proxy里面的led_ctrl来操作led了//Proxy类在ILedService.java中实现1

D、修改catch异常,去掉以前添加的try...catch...代码,在选中代码后,ctrl+alt+T,选择try catch

在android studio中的log界面也可以设置过滤器,设置Tag为LedHal

最新文章

  1. Asp.Net Mvc通用后台管理系统,bootstrap+easyui+权限管理+ORM
  2. unity对话代码
  3. 把cmd信息中的正常和异常输出分别输出到不同txt文件中
  4. Java面试题系列 提高Java I/O 性能
  5. sudo gem install cocoapods 没反应问题
  6. [MetaHook] R_SparkStreaks
  7. 一个不安装Oracle客户端的方法------未经试验
  8. Getting Started with the C# Driver
  9. MyBatis的动态SQL操作--更新
  10. 关于echarts绘图,主题的更换
  11. Java设计模式(四) 装饰 代理模式
  12. Swift 4 Hex Color
  13. vue层级关系的数据管理
  14. HTTPS数据传输过程简介
  15. NodeJs递归删除非空文件夹
  16. Mysql分析优化查询的方式
  17. MarkdownPad编写博客技巧笔记
  18. gulp的使用 文档
  19. SDN openflow 学习小得
  20. window下pip install Scrapy报错解决方案

热门文章

  1. 分享一下10个常用jquery片段
  2. 【Uva 1543】Telescope
  3. unity3d编程日志
  4. eclipse-ubuntu14.04图标替换不掉的问题
  5. thinkphp5 left join
  6. c#的中英文混合字符串截取 public static string SubString(string inputString, int byteLength)
  7. BZOJ3238: [Ahoi2013]差异(后缀数组)
  8. ThinkPHP5.0---静态方法
  9. 【Codeforces Round #452 (Div. 2) B】Months and Years
  10. django 简单会议室预约(1)