Android 中对so库简单的调用封装流程

1、so在工程中的放置位置

工程中src -> main -> jniLibs(自己新建的目录)下,然后根据自己的需求新建armeabi 和 armeabi-v7a等目录

《Android 中对so库简单的调用封装流程》 image.png

2、查看so包名目录

有两种方法:

  • 一是通过向你提供so库的人要,他开发一般都知道
  • 二个自己打开去查看
    用记事本打开

    《Android 中对so库简单的调用封装流程》 image.png

根据这个:ava_com_tecsun_jni_EPP_1API可以得知包名是:com.tecsun.jni

3、新建so库包名目录

《Android 中对so库简单的调用封装流程》 image.png

4、新建应用层引用文件

《Android 中对so库简单的调用封装流程》 image.png

5、编写引用文件EPP_API的代码

《Android 中对so库简单的调用封装流程》 image.png

6、封装一层工具类,便于以后维护

public class NewPinPadUtils {

    private static final String TAG = NewPinPadUtils.class.getSimpleName();
    public static final int TIME_OUT_60 = 60 ;
    public static final int TIME_OUT_120 = 120 ;

//    private EPP_API eppApi;

    public NewPinPadUtils( )
    {
//        EPP_API = new EPP_API( );
    }


    /**
     * 检测当前德生宝连接的是哪一款密码键盘
     * @return
     */
    public boolean checkPinPad(){
        try {
            // 返回值  0表示成功, 其他失败
            int result = EPP_API.iCheckPinPad();
            Log.d(TAG,"result============"+result);
            if (result == 0){
                return true;
            }else {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }


    /**
     * 获取明文输入
     * @param timeOut
     * @return
     */
    public String getPinProclaimed(int timeOut){
        Log.d(TAG,"getPinProclaimed============================");
        String pPin = "";
        byte[] bytes = new byte[6];
        int result = EPP_API.iGetPinProclaimed(timeOut,bytes);
        Log.d(TAG,"getPinProclaimed============result================="+result);
        if (result > 0){
            pPin = new String(bytes);
            return pPin;
        }else if (result == 0){
            return "";
        }else {
            return "";
        }
    }

    /**
     * 获得密码键盘输入的密码(新版一体化的实现方式)
     * 固定超时时间
     * @param listener 监听
     */
    public void getInputPwd(final int timeout, final PinPadBackListener listener) {
        Log.d(TAG,"getInputPwd============================");
        ThreadPoolUtil.runTaskInThread(new Runnable() {
            @Override
            public void run() {
                listener.pinPadStrBack(getPinProclaimed(timeout));
            }
        });
    }


    /**
     * 获得密码键盘输入的密码(新版一体化的实现方式)
     * 可以设置超时时间
     * @param listener 监听
     */
    public void getInputPwd(final PinPadBackListener listener) {
        Log.d(TAG,"getInputPwd============================");
        ThreadPoolUtil.runTaskInThread(new Runnable() {
            @Override
            public void run() {
                listener.pinPadStrBack(getPinProclaimed(TIME_OUT_60));
            }
        });
    }


    /**
     * 停止输入,也就是关闭密码键盘
     * @return
     */
    public boolean cancel(){
        int iStopInputKey = EPP_API.iStopInputKey();
        Log.d(TAG,"iStopInputKey================="+iStopInputKey);
        if (iStopInputKey == 0){
            return true;
        }else {
            return false;
        }
    }

}

7、对so接口文档之前自己有疑惑的点

《Android 中对so库简单的调用封装流程》 image.png

《Android 中对so库简单的调用封装流程》 image.png

    原文作者:追梦小乐
    原文地址: https://www.jianshu.com/p/ac2a32c64231
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞