SDK开发文档

背景

此专栏主题旨在于帮助使用iMin POS机应用开发者,快速适配iMin的设备,从Android13开始,我们做了全新的升级,相比之前的SDK,可以做到一次适配,后续移植到其他iMin的设备或者版本升级,无需重新适配,同时针对Android大版本升级本身带来的适配工作量,我们做了适配指引,可参考Android版本应用适配指南

1. 快速集成SDK

方式一:(推荐)

settings.gradle 添加

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}

app/build.gradle 中增加以下代码

implementation 'com.github.iminsoftware:IminDeviceLibrary:3.0.0'

完成后,重新build项目。

Demo可以参考该链接:https://github.com/iminsoftware/IminDeviceLibrary

方式二

下载 IminLib3.0.jar ,将jar文件放在libs目录下

app/build.gradle 中增加以下代码

implementation 'files("libs/IminLibs.jar")'

导入jar包完成后,重新build项目。

开发文档,参考 IminLibs3.0接入指南,可以下载demo源码,进行功能测试

2. 初始化SDK

2.1 初始化

//在项目Application中初始化
DeviceManager.initialize(this);

2.2 获取组件管理器

//获取组件管理器
DeviceManager mDeviceManager = DeviceManager.getDeviceManager(this);

2.3 判断初始化是否成功

if(mDeviceManager.isInitialized()){
    //初始化成功后才能调用相关功能
}

3. API列表

3.1 获取设备信息相关API

3.1.1 获取设备型号

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_GET_MODEL

返回参数

String result: 设备型号

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_GET_MODEL", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.2 获取设备的硬件平台

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_GET_PLATFORM

返回参数

String result: 硬件平台

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_GET_PLATFORM", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.3 获取设备品牌

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_GET_BRAND

返回参数

String result: 设备品牌

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_GET_BRAND", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.4 获取设备SN

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_GET_SN

返回参数

String result: 设备SN

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_GET_SN", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.5 获取设备是否为双屏

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_GET_DUALSCREEN

返回参数

result:
true: 双屏设备
false: 非双屏

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_GET_DUALSCREEN", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.6 获取硬件设备信息

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_HW_INFO
callback:返回数据 参考 HardwareInfo 类

返回参数

String result: 返回数据参考 HardwareInfo 类

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_HW_INFO", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.7 获取网络信息相关信息

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_NETWORK_INFO
callback:返回数据 参考 NetworkInfo 类

返回参数

String result: 返回数据参考 NetworkInfo 类

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_NETWORK_INFO", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.8 获取设备软件的相关信息

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_SW_INFO
callback:返回数据 参考 SoftwareInfo 类

返回参数

String result: 返回数据参考 SoftwareInfo 类

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_SW_INFO", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.9 获取设备显示的相关信息

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_DISPLAY_INFO
callback:返回数据 参考 DisplayInfo 类

返回参数

String result: 返回数据参考 DisplayInfo 类

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_DISPLAY_INFO", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.10 获取设备内存和存储空间的信息

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_MEMORY_INFO
callback:返回数据 参考 MemoryInfo 类

返回参数

String result: 返回数据参考 MemoryInfo 类

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_MEMORY_INFO", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.11 获取设备内存的详细信息

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_MEMORY_DETIAL_INFO
callback:返回数据 参考 MemoryDetail 类

返回参数

String result: 返回数据参考 MemoryDetail 类

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_MEMORY_DETIAL_INFO", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.12 获取设备存储空间的详细信息

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_STORAGE_INFO
callback:返回数据 参考 StorageDetail 类

返回参数

String result: 返回数据参考 StorageDetail 类

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_STORAGE_INFO", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.1.13 获取cpu的相关信息

属性

描述

方法

void getDeviceInfoAsyn(String name, IAsyncCallback callback)

参数

name:DEVICE_INFO_CPU_INFO
callback:返回数据 参考 CPUDetail 类

返回参数

String result: 返回数据参考 CPUDetail 类

示例

mDeviceManager.getDeviceInfoAsyn("DEVICE_INFO_CPU_INFO", new IAsyncCallback.Stub() {
    @Override
    public void onResult(String result) throws RemoteException {
        Log.d(TAG, result);
    }
});

3.2 设备操作相关API

3.2.1 设置蓝牙名称

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

设置蓝牙名称

API限制

Android 15

参数

json:{"oemConfig":{"setBTName":"bt11"}}
callback:回调
备注:setBTName:String 蓝牙名称

示例

JsonObject controlBean = new JsonObject();
JsonObject oemConfig = new JsonObject();
controlBean.add("oemConfig", oemConfig);
oemConfig.addProperty("setBTName", "bt11");
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.2 设置虚拟蓝牙名称

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

设置虚拟蓝牙名称

API限制

Android 15

参数

json:{"oemConfig":{"setDeviceVirtualBluetoothName":"vbt11"}}
callback:回调
备注:setDeviceVirtualBluetoothName:String 虚拟蓝牙名称

示例

JsonObject controlBean = new JsonObject();
JsonObject oemConfig = new JsonObject();
controlBean.add("oemConfig", oemConfig);
oemConfig.addProperty("setDeviceVirtualBluetoothName", "vbt11");
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.3 设置屏幕超时

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

设置屏幕超时

API限制

Android 15

参数

json:{"oemConfig":{"screenTimeout":"2000"}}
callback:回调
备注:screenTimeout:String 超时时间(毫秒)

示例

JsonObject controlBean = new JsonObject();
JsonObject oemConfig = new JsonObject();
controlBean.add("oemConfig", oemConfig);
oemConfig.addProperty("screenTimeout", "2000");
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.4 设置浮动窗口权限

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

设置浮动窗口权限

API限制

Android 15

参数

json:{"oemConfig":{"setAppsHaveAlertWindowPermiss":"com.example.app"}}
callback:回调
备注:packageName:String 包名

示例

JsonObject controlBean = new JsonObject();
JsonObject oemConfig = new JsonObject();
JsonObject floatWindow = new JsonObject();
controlBean.add("oemConfig", oemConfig);
oemConfig.add("setAppsHaveAlertWindowPermiss", "com.example.app");
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.5 打开钱箱

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

打开钱箱

参数

json:{"peripheralConfig":{"openCashBox":true}}
callback:回调
备注:openCashBox设置true 打开

示例

JsonObject controlBean = new JsonObject();
JsonObject peripheral = new JsonObject();
controlBean.add("peripheralConfig", peripheral);
peripheral.addProperty("openCashBox", true);
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.6 设置主屏背光亮度

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

设置主屏背光亮度

API限制

Android 15

参数

json:{"peripheralConfig":{"screenBrightness":"3"}}
callback:回调
备注:screenBrightness:String 亮度值(0-255)

示例

JsonObject controlBean = new JsonObject();
JsonObject peripheralConfig = new JsonObject();
controlBean.add("peripheralConfig", peripheralConfig);
oemConfig.addProperty("screenBrightness", "3");
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.7 副屏背光亮度

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

设置副屏背光亮度

API限制

Android 15

参数

json:{"peripheralConfig":{"subScreenBrightness":"3"}}
callback:回调
备注:subScreenBrightness:String 亮度值(0-255)

示例

JsonObject controlBean = new JsonObject();
JsonObject peripheralConfig = new JsonObject();
controlBean.add("peripheralConfig", peripheralConfig);
oemConfig.addProperty("subScreenBrightness", "3");
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.8 设置WIFI开关

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

设置WIFI开关

参数

json:{"oemConfig":{"setWifiSwitch":true}}
callback:回调
备注:setWifiSwitch:boolean true开启,false关闭

示例

JsonObject controlBean = new JsonObject();
JsonObject oemConfig = new JsonObject();
controlBean.add("oemConfig", oemConfig);
oemConfig.addProperty("setWifiSwitch", true);
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.9 设置蓝牙开关

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

设置蓝牙开关

参数

json:{"oemConfig":{"setBlueToothSwitch":true}}
callback:回调
备注:setBlueToothSwitch:boolean true开启,false关闭

示例

JsonObject controlBean = new JsonObject();
JsonObject oemConfig = new JsonObject();
controlBean.add("oemConfig", oemConfig);
oemConfig.addProperty("setBlueToothSwitch", true);
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.10 显示隐藏状态栏

属性

描述

方法

void setHideStatusBar(Context context, boolean hide)

功能

显示隐藏状态栏

参数

context:上下文
hide:false 显示,true 隐藏

示例

mDeviceManager.setHideStatusBar(UIControlActivity.this, false);

3.2.11 显示隐藏导航栏

属性

描述

方法

void setHideNavigationBar(Context context, boolean hide)

功能

显示隐藏导航栏

参数

context:上下文
hide:false 显示,true 隐藏

示例

mDeviceManager.setHideNavigationBar(UIControlActivity.this, false);

3.2.12 静默安装apk

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

静默安装apk

API限制

Android 15

参数

json:{"oemConfig":{"installApkPackage":"cn.wch.usbdemo","installApkPath":"/sdcard/com.example.deletefile/usbTest.apk","isLaunchAfterInstallation":true,"isDeleteAfterInstallation":true}}
callback:回调
备注:
installApkPath:apk安装路径
installApkPackage: apk包名
isLaunchAfterInstallation :设置安装后是否打开
true: 打开应用
false: 不打开应用
isDeleteAfterInstallation:是否安装后删除apk
true: 删除apk
false: 不删除apk

示例

JsonObject controlBean = new JsonObject();
JsonObject oemConfig = new JsonObject();
controlBean.add("oemConfig", oemConfig);
oemConfig.addProperty("installApkPackage", "cn.wch.usbdemo");
oemConfig.addProperty("installApkPath", "/sdcard/com.example.deletefile/usbTest.apk");
oemConfig.addProperty("isLaunchAfterInstallation", true);
oemConfig.addProperty("isDeleteAfterInstallation", true);
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.13 设置权限授权

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

设置权限授权

API限制

Android 15

参数

json:{"oemConfig":{"defaultPermissionPolicy":{"permissionStatus":true,"permissionPkg":"com.device.manager.demo","permissionName":"android.permission.WRITE_EXTERNAL_STORAGE"}}}
callback:回调
备注:
单个权限下授予
permissionPkg 包名 String
permissionName 权限名 String
permissionStatus 是否授权 true / false

示例

JsonObject controlBean = new JsonObject();
JsonObject oemConfig = new JsonObject();
JsonObject permissionPolicy = new JsonObject();
controlBean.add("oemConfig", oemConfig);
oemConfig.add("defaultPermissionPolicy", permissionPolicy);
permissionPolicy.addProperty("permissionStatus", true);
permissionPolicy.addProperty("permissionName", "android.permission.WRITE_EXTERNAL_STORAGE");
permissionPolicy.addProperty("permissionPkg", "com.example.iminlibsdemo");
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.14 授予申明的所有权限

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

授予申明的所有权限

API限制

Android 15

参数

json:{"OEMApplicationPolicy":[{"packageName":"com.example.iminlibsdemo","allRuntimePermissionPolicy":"GRANT"}]}
callback:回调
备注:
packageName 包名 String
allRuntimePermissionPolicy 是否授权
GRANT :授予权限
DENY : 拒绝权限

示例

JsonObject controlBean = new JsonObject();
JsonArray OEMApplicationPolicy = new JsonArray();
controlBean.add("OEMApplicationPolicy", OEMApplicationPolicy);
JsonObject item = new JsonObject();
item.addProperty("packageName", "com.example.iminlibsdemo");
item.addProperty("allRuntimePermissionPolicy", "GRANT");
OEMApplicationPolicy.add(item);
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.15 指定包名应用开机后启动

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

指定包名应用开机后启动

API限制

Android 15

参数

json:{"OEMApplicationPolicy":[{"packageName":"com.example.iminlibsdemo","setAppStartOnBoot":true}]}
callback:回调
备注:
packageName 包名 String
setAppStartOnBoot
true :开机后启动
false :取消开机后启动

示例

JsonObject controlBean = new JsonObject();
JsonArray OEMApplicationPolicy = new JsonArray();
controlBean.add("OEMApplicationPolicy", OEMApplicationPolicy);
JsonObject item = new JsonObject();
item.addProperty("packageName", "com.example.iminlibsdemo");
item.addProperty("setAppStartOnBoot", true);
OEMApplicationPolicy.add(item);
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.2.16 设置系统时间与时区

属性

描述

方法

sendAMCommandAsyn(String json, IAsyncCallback callback)

功能

设置系统时间与时区

API限制

Android 15

参数

json:{"oemConfig":{"setTime":1767086226000,"setTimeZone":"Asia/Shanghai"}}
callback:回调
备注:
setTime 设置时间,单位毫秒 long
setTimeZone 设置时区 String
需使用 TimeZone.getAvailableIDs() 里面的值

示例

JsonObject controlBean = new JsonObject();
JsonObject oemConfig = new JsonObject();
controlBean.add("oemConfig", oemConfig);
oemConfig.addProperty("setTime", 1767086226000L);
oemConfig.addProperty("setTimeZone", "Asia/Shanghai");
try {
    mDeviceManager.sendAMCommandAsyn(new Gson().toJson(controlBean), 
        new IAsyncCallback.Stub() {
        @Override
        public void onResult(String result) throws RemoteException {
            Log.d(TAG, result);
        }
    });
} catch (RemoteException e) {
    e.printStackTrace();
}

3.3 Psam

3.3.1 配置psam参数

属性

描述

方法

iccDevParaSet(Context context, byte slot, byte clkSel, byte mode, byte pps)

功能

配置psam参数

参数

context:上下文
slot:卡通道号 byte
clkSel:byte
mode:byte
pps:byte

示例

byte slot = 0x01;
mDeviceManager.iccDevParaSet(context, slot, (byte) 0, (byte) 0, (byte) 0);

3.3.2 打开psam

属性

描述

方法

int openPsam(Context context, byte slot, byte vccMode, byte[] ATR)

功能

打开psam

参数

slot:卡通道号
vccMode:指定卡片供电电压值
ATR:卡片复位应答(至少需要32+1bytes的空间),其内容为长度(1字节)+复位应答内容

示例

byte[] atr = new byte[40];
byte slot = 0x01;
mDeviceManager.openPsam(context, slot, (byte) 1, atr);

3.3.3 关闭psam

属性

描述

方法

int closePsam(Context context, byte slot)

功能

关闭psam

参数

context:上下文
slot:卡通道号

示例

byte slot = 0x01;
mDeviceManager.closePsam(context, slot);

3.3.4 发送psam指令

属性

描述

方法

int sendPsamCommand(Context context, byte slot, byte[] apduSend, byte[] apduRecv)

功能

发送psam指令

参数

context:上下文
slot:卡通道号
apduSend:发送给卡片的apdu
apduRecv:接收到卡片返回的apdu

示例

byte slot = 0x01;
byte[] apduSend = new byte[600];
byte[] apduRecv = new byte[600];
apduSend[0] = = (byte) 0x00;
apduSend[1] = = (byte) 0xa4;
apduSend[2] = = (byte) 0x04;
apduSend[3] = = (byte) 0x00;
apduSend[4] = = (byte) 0x00;
apduSend[5] = = (byte) 0x0e;
System.arraycopy("1PAY.SYS.DDF01".getBytes(), 0, apduSend, 6, 14);
mDeviceManager.commandPsam(context, slot, apduSend, apduRecv);

3.3.5 发送psam指令(new)

属性

描述

方法

byte[] sendPsamCommandNew(Context context, byte slot, byte[] sendData)

功能

发送psam指令(新版本)

参数

context:上下文
slot:卡通道号
apduSend:发送给卡片的apdu
apduRecv:接收到卡片返回的apdu

示例

byte slot = 0x01;
byte[] apduSend = new byte[600];
byte[] apduRecv = new byte[600];
apduSend[0] = = (byte) 0x00;
apduSend[1] = = (byte) 0xa4;
apduSend[2] = = (byte) 0x04;
apduSend[3] = = (byte) 0x00;
apduSend[4] = = (byte) 0x00;
apduSend[5] = = (byte) 0x0e;
System.arraycopy("1PAY.SYS.DDF01".getBytes(), 0, apduSend, 6, 14);
mDeviceManager.sendPsamCommandNew(context, slot, apduSend, apduRecv);

3.4 USB Light

3.4.1 获取设备

属性

描述

方法

UsbDevice getLightDevice(Context context)

功能

获取设备

示例

mDeviceManager.getLightDevice(context)

3.4.2 连接设备

属性

描述

方法

boolean connectLightDevice(Context context)

功能

连接USB灯设备

参数

context:上下文

示例

UsbDevice device = mDeviceManager.getLightDevice(context);
mDeviceManager.connectLightDevice(context);

3.4.3 打开usb绿灯

属性

描述

方法

void turnOnGreenLight(Context context)

功能

打开usb绿灯

示例

mDeviceManager.turnOnGreenLight(context)

3.4.4 打开usb红灯

属性

描述

方法

void turnOnRedLight(Context context)

功能

打开usb红灯

示例

mDeviceManager.turnOnRedLight(context)

3.4.5 关闭usb灯

属性

描述

方法

void turnOffLight(Context context)

功能

关闭usb灯

示例

mDeviceManager.turnOffLight(context)

3.4.6 断开连接设备

属性

描述

方法

void disconnectLightDevice(Context context)

功能

断开USB灯设备连接

参数

context:上下文

示例

mDeviceManager.disconnectLightDevice(context);

4. 设备信息返回数据参考表

类名:HardwareInfo

设备硬件的相关信息。仅当设备政策中的 hardwareStatusEnabled 为 true 时,与温度阈值相关的字段才可用。

字段

类型

字段长度

是否必须

说明

brand

String

128

设备的品牌。例如 Google。

hardware

String

128

硬件的名称。例如 Angler。

deviceBasebandVersion

String

128

基带版本。例如 MDM9625_104662.22.05.34p。

manufacturer

String

128

制造商。例如 imin。

serialNumber

String

128

设备序列号。

model

String

128

设备的型号。例如I25D01 。

deviceName

String

128

设备名称 例如Swift 2 Pro

batteryShutdownTemperatures

Number[]

10

设备上每块电池的电池关闭温度阈值(以摄氏度为单位)。

cpuShutdownTemperatures

Number[]

10

设备上每个 CPU 的 CPU 关闭温度阈值(以摄氏度为单位)。

cpuThrottlingTemperatures

Number[]

10

设备上每个 CPU 的 CPU 节流温度阈值(以摄氏度为单位)。

gpuShutdownTemperatures

Number[]

10

设备上每个 GPU 的 GPU 关闭温度阈值(以摄氏度为单位)。

gpuThrottlingTemperatures

Number[]

10

设备上每个 GPU 的 GPU 节流温度阈值(以摄氏度为单位)。

skinShutdownTemperatures

Number[]

10

设备皮肤关闭温度阈值(以摄氏度为单位)。

skinThrottlingTemperatures

Number[]

10

设备皮肤节流温度阈值(以摄氏度为单位)。

enterpriseSpecificId

String

128

仅限输出。用于唯一标识特定组织中的个人自有设备的 ID。在同一实体设备上注册到同一组织后,此 ID 在设置乃至恢复出厂设置后依然有效。此 ID 适用于装有工作资料的个人自有设备(搭载 Android 12 及更高版本的设备)。

类名:NetworkInfo

设备网络信息

字段

类型

字段长度

是否必须

说明

imei

String

128

GSM 设备的 IMEI 号码。例如 A1000031212。

meid

String

128

CDMA 设备的 MEID 号。例如 A00000292788E1。

wifiMacAddress

String

128

设备的 Wi-Fi MAC 地址。例如 7c:11:11:11:11:11。

telephonyInfos

TelephonyInfo[]

10

提供与设备上的每张 SIM 卡相关联的电话信息。

类名:TelephonyInfo

与设备上指定 SIM 卡相关的电话信息。仅在 Android API 级别 23 及更高版本的全代管式设备上受支持。

字段

类型

字段长度

是否必须

说明

phoneNumber

String

32

与此设备关联的电话号码(如果有)。

carrierName

String

128

运营商名称。

类名:SoftwareInfo

设备软件的相关信息

字段

类型

字段长度

是否必须

说明

androidVersion

String

128

用户可见的 Android 版本字符串

androidBuildNumber

String

128

旨在向用户显示的 Android build ID 字符串。

deviceKernelVersion

String

64

内核版本,例如 2.6.32.9-g103d848。

bootloaderVersion

String

128

系统引导加载程序版本号,例如0.6.7

securityPatchLevel

String

128

安全补丁级别,例如2016-05-01。

androidBuildTime

String

128

构建时间。时间戳采用 RFC3339 世界协调时间(UTC,即"祖鲁时")格式,精确到纳秒,最多九个小数位。示例:"2014-10-02T15:01:23Z" 和 "2014-10-02T15:01:23.045123456Z"。

primaryLanguageCode

String

128

设备上主要语言区域的 IETF BCP 47 语言代码。

deviceBuildSignature

String

128

与系统软件包关联的 android.content.pm.Signature 的 SHA-256 哈希值,可用于验证系统 build 是否未经修改。

类名:DisplayInfo

设备显示信息

字段

类型

字段长度

是否必须

说明

name

String

128

显示设备的名称。

displayId

Integer

32

唯一显示 ID。

width

Integer

32

屏幕宽度(像素)。

height

Integer

32

屏幕高度(像素)。

density

Integer

32

屏幕密度(DPI)。

refreshRate

Integer

32

显示屏的刷新率(以每秒帧数为单位)。

state

String

128

屏幕的状态。
DISPLAY_STATE_UNSPECIFIED:不允许使用此值。
OFF:显示屏已关闭。
ON:显示屏已开启。
DOZE:显示屏在低功耗状态下打盹。
SUSPENDED:显示屏因挂起低功耗状态而打盹。

类名:MemoryInfo

设备内存和存储空间的信息

字段

类型

字段长度

是否必须

说明

totalRam

String

32

设备上的 RAM 总容量(以字节为单位)。

totalInternalStorage

String

32

设备内部存储空间总量(以字节为单位)

类名:MemoryDetail

有关设备内存信息。

字段

类型

字段长度

是否必须

说明

totalMemory

String

32

总内存

freeMemory

String

32

free memory 未分配内存

availableMemory

String

32

available memory 未分配内存+可回收内存,可用内存以该属性为主

usedMemory

String

32

used memory

buffers

String

32

Buffer是为了cpu和块设备(block device)之间读写速度不对等而设计的,Buffers统计的就是这部分缓冲区的内存总大小。这部分内存drop cache可以被回收。

cached

String

32

cached用于文件高速缓存,不包括swapcache和buffers即Cached = file pages-swapcache-buffers约等于 Active(file) + Inactive(file)

swapTotal

String

32

swap total

swapFree

String

32

swap free

shmem

String

32

shmem被各个进程共享的内存页的数量tmpfs所使用的内存.tmpfs即利用物理内存来提供RAM磁盘的功能。在tmpfs上保存文件时,文件系统会暂时将它们保存到磁盘高速缓存上,因此它是属于磁盘高速缓存对应的"buffers+cached"一类。但是由于磁盘上并没有与之对应的内容,因此它并未记录在File-backed内存对应的LRU列表上,而是记录在匿名内存的LRU表上。这就是 buffers + cached = Active(file) + Inactive(file) + Shmem 公式的由来

sreclaimable

String

32

sreclaimable count Slab可被回收的量。调用kmem_getpages()时加上SLAB_RECLAIM_ACCOUNT标记,表明是可回收的,计入SReclaimable,否则计入SUnreclaim。

swap

String

32

swap

类名:CPUDetail

有关CPU的信息

字段

类型

字段长度

是否必须

说明

model

String

128

model

manufacturer

String

128

manufacturer Name

totalCPU

String

128

cpu总赫兹数

usedCPU

String

128

cpu已占用赫兹

cores

String

128

核心数

cpuList

List<CPUItem>

128

cpu簇 sys/devices/system/cpu/cpufreq/policyXX表示簇的路径

-- frequency

String

128

当前频率 sys/devices/system/cpu/cpufreq/policyX/scaling_cur_freq

-- minfreq

String

128

当前最小频率 sys/devices/system/cpu/cpufreq/policyX/scaling_min_freq

-- maxfreq

String

128

当前最大频率 sys/devices/system/cpu/cpufreq/policyX/cpuinfo_max_freq

-- frequencyList

List<String>

N

支持频率 sys/devices/system/cpu/cpufreq/policyX/scaling_available_frequencies

-- mode

String

128

当前模式 sys/devices/system/cpu/cpufreq/policyX/scaling_governor

-- modeList

List<String>

128

支持模式 sys/devices/system/cpu/cpufreq/policyX/scaling_available_governors

-- online

String

128

在线状态 /sys/devices/system/cpu/cpuX/online

类名:StorageDetail

设备存储空间详细信息

字段

类型

字段长度

是否必须

说明

id

String

-

存储唯一标识

availableStorage

String

-

可用存储大小

totalStorage

String

-

总存储大小

usedStorage

String

-

已用存储大小

volumes

StorageVolume

-

存储卷信息

类名:StorageVolume

存储卷信息

字段

类型

字段长度

是否必须

说明

type

String

-

卷名称

fsType

String

-

类型

state

String

-

卷的当前状态

fsUuid

String

-

存储卷的唯一标识符

path

String

-

卷的挂载点路径