SDK杂记
在生成CSR的时候,可以输入证书的常用域,包括:countryName, stateOrProvinceName, localityName, organizationName, organizationUnitName, commonName和emailAddress
cloudpossdkV1.8.1.5开始支持 com.cloudpos.hsm.HSMDevice
HSMDevice hsm = (HSMDevice) POSTerminal.getInstance(context)
.getDevice(POSTerminal.DEVICE_NAME_HSM);
hsm.open();
// 单字段CSR(原接口) X500Principal subject1 = new X500Principal("CN=www.test.com");
byte[] csr1 = hsm.generateCSR("terminal", subject1);
// 多字段CSR(#40841新支持CN/O/OU/C/ST/L) X500Principal subject2 = new X500Principal( "CN=pay.test.com,O=TestPayCorp,OU=Security Dept,C=CN,ST=Guangdong,L=Shenzhen");
byte[] csr2 = hsm.generateCSR("terminal", subject2);
hsm.close();
权限:CLOUDPOS_SAFE_MODULE 前置条件:HSM需存在公私钥对(例如:terminal别名)
主动查询终端是否越界的接口(电子围栏相关)
cloudpossdkV1.8.2.10开始支持, TmsAgent-v5.4.50.3以上开始支持。
com.cloudpos.TerminalSpec
/** * Requests a geofence status check by sending a broadcast to the Terminal. * *
* When this method is invoked, Terminal performs a geofence validation immediately. * The result is delivered asynchronously via broadcast intents. This method does not * return the result directly. *
* *
Broadcast Result Actions:
*
- *
- * Device is out of the geofence: * com.coudpos.ACTION_LOCATION_OUT_OF_BOUND * *
- * Device has re-entered the geofence after being out of bounds: * com.coudpos.ACTION_LOCATION_IN_OF_BOUND * *
- * Geofence feature is not enabled on the device: * com.coudpos.ACTION_LOCATION_GEOFENCE_DISABLED * *
* *
Implementation Details:
*
- *
- Uses Android broadcast mechanism with action-based filtering *
- Caller must register a {@link android.content.BroadcastReceiver} to receive results *
- Result is typically returned shortly after the request is triggered *
* *
Notes:
*
- *
- Ensure Terminal is registered before invoking this method *
- /
requestGeofenceBroadcast() //Sample code: TerminalSpec terminalSpec = POSTerminal.getInstance(context).getTerminalSpec();
terminalSpec.requestGeofenceBroadcast();
广播接收: - com.coudpos.ACTION_LOCATION_OUT_OF_BOUND — 终端出围栏
- com.coudpos.ACTION_LOCATION_IN_OF_BOUND — 终端入围栏
- com.coudpos.ACTION_LOCATION_GEOFENCE_DISABLED — 围栏未启用
<receiver android:name="com.cloudpos.api.receiver.LocationReceiver" android:enabled="true" android:exported="true">
<intent-filter> <action android:name="com.coudpos.ACTION_LOCATION_OUT_OF_BOUND" /> </intent-filter> <intent-filter>
<action android:name="com.coudpos.ACTION_LOCATION_IN_OF_BOUND" /> </intent-filter> <intent-filter>
<action android:name="com.coudpos.ACTION_LOCATION_GEOFENCE_DISABLED" /> </intent-filter> </receiver> ==对于在Q1K/Q2pro上,persist.wp.hw.customerdisplay值可能是size:240x320或者size:272x480,由驱动负责设置。SDK提供获取接口来解析这个属性: android.util.Size CustomerDisplayDevice.getSize();== cloudpossdkV1.8.2.10_Standard.aar以上开始支持。
Q1K系列,需要bootloader0857+支持 #40099
<uses-permission android:name="android.permission.CLOUDPOS_CUSTOMER_DISPLAY"/>
com.cloudpos.customerdisplay
CustomerDisplayDevice device = (CustomerDisplayDevice) POSTerminal.getInstance(context).getDevice(POSTerminal.DEVICE_NAME_CUSTOMER_DISPLAY);
device.open();
device.close();
logcat打包接口
需要权限
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
接口实现 ILogDevice device = LogDeviceImpl.getInstance(context);
示例代码:
public void test() {
if(th null || th.getState() Thread.State.TERMINATED){
th = new Thread(new Runnable() {
@Override
public void run() {
boolean result ;
ILogDevice logDevice = LogDeviceImpl.getInstance(mContext);
// result = logDevice.packageLog(1, "/sdcard/test/1_logs.zip");
// Logger.debug("run 1_logs result (%s)", result);
result = logDevice.packageLogcats(3, "/sdcard/test/3_logcats.zip");
Logger.debug("run 3_logcats result (%s)", result);
long endTime = System.currentTimeMillis();
long startTime = endTime - 12 * 60 * 60 * 1000;
result = logDevice.packageLogcats(startTime, endTime, "/sdcard/test/11_hours_logcats.zip");
Logger.debug("run 11_hours_logcats result (%s)", result); } }); th.start(); } }
属性ro.wp.antenna.position,0表示内置,1表示外置
提供JavaSDK的底层c的接口部分,每次被调用时,同时设置persist.wp.antenna.position确保信息持久化。
cloudpossdkV1.8.1.1 验证ok
需要固件支持,Q3MINI-V(pcbc)system1072+ #40676
<uses-permission android:name="android.permission.CLOUDPOS_MCUCTL" />
AntennaDevice device = (AntennaDevice) POSTerminal.getInstance(context).getDevice(POSTerminal.DEVICE_NAME_ANTENNA);
device.open();
device.getAntennaMode();
device.setAntennaMode(AntennaDevice.AntennaMode.INTERNAL);
device.close();