工作总结|Android智能遥控器DEMO

前言:前段时间接手了公司几个智能控制的APP的开发工作。在开发的过程中遇到了许多的关于App的问题-架构,代码逻辑,填了许多坑(当然有人把我拉出来啦!)。为了避免再次爬坑并记录工作,写下此博客。
主要设备:410c的开发板,外接的红外模块。
APP的主要功能:一个是控制模块,一个是学习模块,以及可能要有的远程控制模块。
控制模块:主要是往底层节点写一些红外特征码,主要是一些些如夫人操作:

public static void WriteData(String path, String content) { FileOutputStream fos = null; File file = new File(path); if (file.exists()) { try { //注意new FileOutputStream的时候如果后面还需添加数据而不是覆盖数据就因该在后面加true fos = new FileOutputStream(file); Log.e("File", "FileWriter"); } catch (FileNotFoundException e) { e.printStackTrace(); } byte[] array = content.getBytes(); try { fos.write(array); } catch (IOException e) { e.printStackTrace(); } try { fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); }}}

关于本Demo的第二个难点就是学习模块:
这个功能的实现主要是在C里实现的,我们主要是调用下JNI的方法进行读取已学习到的红外特征码。
关于不是自己打包的SO文件特别要强调一句:“注意JNI方法的包名要和调用JNI的报名一致!”不然会有各种调不到方法的错误。
这是我的JNI的Load文佳的path:/SmartRemoteController/app/src/main/java/com/ircode
package com.etek.ircore; import android.util.Log; import com.ircode.IRCode; /** * Created by root on 17-7-19. */public class RemoteCore { private static final String libSoName = "IRCore"; static { try { System.loadLibrary(libSoName); Log.e("JNI",libSoName+" load finished"); }catch (Exception e){ Log.e("JNI"," exception "+e.getMessage()); }}public native static IRCode ET4007Learn(byte[] codes); public native static byte[] readLearnIRCode(); public native static int IRinit(); }

如何查看SO提供的方法接口? 在Ubuntu下可以使用如下命令 nm -D XX.so
工作总结|Android智能遥控器DEMO
文章图片

【工作总结|Android智能遥控器DEMO】查看到的方法名和当前的包名一定要相同。

    推荐阅读