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

這裏寫圖片描述

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章