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

这里写图片描述

查看到的方法名和当前的包名一定要相同。

猜你喜欢

转载自blog.csdn.net/u013763766/article/details/76681370