FireflyApi 1.概述 FireflyApi提供了部分系统接口以及封装了部分用户需要的功能接口,主要是为 了让用户容易和简单的使用系统常用接口, 此文档只是对接口进行简单的说明 ,具体的使用案例如下描述。 支持rk3288 Android5.1平台所有系列机型 支持rk3399 Android7.1平台所有系列机型 支持rk3128 Android5.1平台所有系列机型 2.资源下载和使用 使用FireflyApi时先检查一下机器的固件是否是最新版本,在 [资源下载] 页面找到对应的机型查看固件是否最新,同时也可以同步SDK到最新提交,具体 先选择对应机型的 [wiki] 然后在Android开发->编译Android固件里面找到同步的方式。 FireflyApi使用的整套Demo: [RK3288 firefly_sdkapi_demo.zip](提取码:jvy6) [RK3399 firefly_sdkapi_demo.zip](提取码:icud) [RK3128 firefly_sdkapi_demo.zip](提取码:e5wt) Demo主要包含firefly_sdkapi_demo.apk,firefly-api.jar,libfirefly_api.so 和firefly_sdkapi_demo的源码等,关于apk和 库的使用如下小结描述 ├── apk │   └── firefly_sdkapi_demo.apk ├── lib │   ├── armeabi-v7a │   │   └── libfirefly_api.so │   └── firefly-api.jar ├── Readme_CN.txt ├── Readme_EN.txt └── src └── firefly_sdkapi_demo 2.1 firefly_sdkapi_demo apk 简述 firefly_sdkapi_demo apk 是基于FireflyApi的接口实现的Demo程序,用户可通 过Demo中功能的实现来验证自己的程序或相关接口。 当使用最新版本的固件时 ,里面会内置firefly_sdkapi_demo的应用如图 点击进入apk后会有相应的接口实现列表如图 系统设置接口实现 定时开关机接口实现 硬件接口实现 2.2 如何在eclipse中使用 FireflyApi 对于firefly_sdkapi_demo apk是给用户呈现出接口相应的功能,用户如需要编 写自己的应用程序, 需要将firefly-api.jar放在libs目录下, libfirefly_api.so放到libs/armeabi-v7a目录下 |-libs |-firefly-api.jar |-armeabi-v7a      |-libfirefly_api.so 添加方式如下 3.FireflyApi接口说明 3.1 系统信息 FireflyApi版本信息 函数:public String getFireflyApiVersion() 描述 :FireflyApi 版本信息 范例: String version = mFireflyApi.getFireflyApiVersion(); 获取目前设备的型号 函数:public String getAndroidModel() 描述:获 取目前设备的型号 范例: String model= mFireflyApi.getAndroidModel(); 获取目前设备的android系统的版本 函数:public String getAndroidVersion() 描述:获取目前设备的android系统的版本 范例: String version= mFireflyApi.getAndroidVersion(); 获取设备的RAM大小,单位为MB 函数:public long getRamSpace() 描述: 获取设备的RAM大小,单位为MB 返回:返回RAM大小,单位为MB 范例: long ram = mFireflyApi.getRamSpace(); 获取设备的RAM大小,并格式化为String格式 函数:public String getFormattedRamSpace() 描述:获取设备的RAM大小,并格式化为String格 式 返回: 设备的RAM大小,String格式(1.5GB) 范例: String ram = mFireflyApi.getFormattedRamSpace(); 获取设备的内置Flash大小,单位为MB 函数:public long getFlashSpace() 描述:获取设备的内置Flash大小,单位为MB 返回: 返回Flash大小,单位为 MB 范例: long flash = mFireflyApi.getFlashSpace(); 获取设备内置Flash大小,并格式化为String格式 函数:public String getFormattedFlashSpace() 描述:获取设备内置Flash大小,并格式化为 String格式 返回: 设备的Flash大小,String格式(15.5GB) 范例: String ram = mFireflyApi.getFormattedFlashSpace(); 获取设备的固件内核版本 函数:public String getFormattedKernelVersion() 描述:获取设备的固件内核版本 返回: 内核版本 范例: String kernel_version= mFireflyApi.getFormattedKernelVersion(); 获取设备的固件系统版本和编译日期 函数:public String getAndroidDisplay() 描述:获取设备的固件系统版本和编译日期 返回: 固件系统版本和编译日期 范例: String version= mFireflyApi.getAndroidDisplay(); 3.2 系统设置 系统关机 函数:public void shutDown(boolean showConfirm) 描述:系 统关机 参数:showConfirm是否显示关机框 范例: mFireflyApi.shutDown(false); 系统重启 函数:public void reboot() 描述:系统关机 范例: mFireflyApi.reboot(); 系统休眠 函数:public void sleep() 描述:系统关机 范例: mFireflyApi.sleep(); 截屏 函数:public boolean takeScreenshot(String path,String name) 描述:截图并存储到指定路径 参数:path存储路径    name 存储的文 件名(暂时只支持png格式) 返回: 截图是否成功true/false 范例: mFireflyApi.takeScreenshot("/sdcard/","123.png"); 屏幕旋转 函数:public boolean setRotation(int rotation) 描述:旋转 屏幕参数:rotation 屏幕方向: Surface.ROTATION_0 Surface.ROTATION_90 Surface.ROTATION_180 Surface.ROTATION_270   范例: mFireflyApi.setRotation(Surface.ROTATION_0); 获取屏幕方向 函数:public int getRotation() 描述:获取屏幕方向 返回:rotation 屏幕方向: Surface.ROTATION_0 Surface.ROTATION_90 Surface.ROTATION_180 Surface.ROTATION_270 范例: int rotation = mFireflyApi.getRotation(); 取消屏幕旋转 函数:public void thawRotation() 描述:取消屏幕旋转 范例: mFireflyApi.thawRotation(); 状态栏显示/隐藏 函数:public void setStatusBar(boolean show) 描述 :显示/隐藏状态栏 参数:show 为true显示状态栏,为false隐藏状态栏 范例: mFireflyApi.setStatusBar(false); 背光开关 函数:public void setLcdBackLight(boolean on) 描述:只关 背光,却不进入休眠,软件继续运行 参数:on 为true开背光,为false关背 光 范例: mFireflyApi.setLcdBackLight(false); 是否存在背光 函数:public boolean hasLcdBackLight() 描述:判断是否 存在背光 返回:为true存在背光,为false不存在背光 范例: boolean has = mFireflyApi.hasLcdBackLight(); 设置屏幕亮度 函数:public boolean setBrightness(int brightness) 描 述:设置屏幕亮度 参数:brightness亮度取值范围0-255 返回:为true设 置成功,为false 设置失败 范例: boolean success= mFireflyApi.setBrightness(130); 获取屏幕亮度 函数:public int getBrightness() 描述:获取屏幕亮度 返回:brightness屏幕亮度,获取失败时返回-1 范例: int brightness= mFireflyApi.getBrightness(); 设置系统时间 函数:public boolean setTime( int year, int month, int day, int hour, int minute,int second) 描述:设置系统时间 参数:year 年    month 月    day 日    hour 时    minute 分    second 秒 返回:为true设置成功,为 false设置失败 范例: mFireflyApi.setTime(2018,5,18,5,30,45); 静默安装应用 函数:public boolean silentInstall(String path) 描述: 静默安装应用 参数:path apk地址 返回:为true安装成功 范例: mFireflyApi.silentInstall("/sdcard/123.apk"); 静默卸载应用 函数:public boolean silentUnInstall(String package_name) 描述:静默卸载应用 参数:package_name 为需要卸载应用 的包名 返回:卸载成功返回true,卸载失败返回false 备注:只支持卸载安 装的应用,不知道卸载内置应用 范例: mFireflyApi.silentUnInstall("com.android.settings"); 运行shell命令 函数:public Command execCmd(String cmd) 描述:运行 shell命令 参数:cmd shell命令 返回:Command  input 输入命令 output 输出结果 exitStatus shell运行状态,为0是正常 退出 范例: mFireflyApi.execCmd("ls"); su权限运行shell命令 函数:public static Command execSuCmd(String cmd) 描述:su权限运行shell命令 参数:cmd shell命令 返回:Command input 输入命令         output 输出结果        exitStatus shell运行状态,为0是正常退出 范例: mFireflyApi.execSuCmd("cat init.rk30board.rc");//init.rk30board.rc默认 权限750 保存系统logcat 函数:public void saveLogcat(String folderPath,String fileName) 描述:抓取Android层的LOG并保存相应目录 参数:folderPath 保 存路径       fileName  保存文件名 范例: mFireflyApi.saveLogcat("/mnt/sdcard/","123.log"); 获取Hdmiin当前连接状态 函数:public String getHdmiinStatus() 描述: 获取Hdmiin当前连接状态 返回:STATUS_HDMI_IN_CONNECT="1" hdmiin已连 接       STATUS_HDMI_IN_NO_CONNECT="0" hdmiin未连接    范例 : String hdmiin_status = mFireflyApi.getHdmiinStatus(); 获取当前的屏幕数量 函数:public int getScreenNumber(Context context) 描述:获取当前的屏幕数量 返回:失败时返回0    范例: int screen_number = mFireflyApi.getScreenNumber(context); 3.3 硬件接口 使能看门狗 函数:public boolean watchDogEnable(boolean enable) 描述 :打开/关闭看门狗 参数:enable为true启用,为false关闭 返回:为true 设置成功,为false设置失败 备注:打开看门狗后,每隔30s需要喂狗一次, 负责看门狗会关闭 范例: boolean success = mFireflyApi.watchDogEnable(true); 看门狗喂狗 函数:public boolean watchDogFeed() 描述:喂狗一次 返回 :为true喂狗成功 范例: boolean success = mFireflyApi.watchDogFeed(); 麦克风切换(3128板型不支持) 函数:public boolean switchMic(int mic_type) 描述:麦克风切换到板载/耳机 参数:mic_type TYPE_DEFAULT_MIC 板载mic TYPE_HEADSET_MIC 耳机mic 返回:为true切换成功 范例: boolean success = mFireflyApi.switchMic(FireflyApi.TYPE_DEFAULT_MIC); gpio控制 函数:public boolean gpioCtrl(int gpio, String direction, int value) 描述:控制gpio 参数:gpio    direction in, out, high, low high/low    value 1/0 返回:为true设置成功 范例: boolean success = mFireflyApi.gpioCtrl(263,"out",1);//GPIO8_A7的gpio节 点为263 gpio读值 函数:public int gpioRead(int gpio) 描述:读取gpio的值 参数:gpio 返回:读取失败时返回-1 范例: int gpioValue = mFireflyApi.gpioRead(263);//GPIO8_A7的gpio节点为263 检查gpio口是否被系统占用 函数:public boolean isGpioOccupied(int gpio) 描述:检查gpio口是否被系统占用 参数:gpio 返回:为true被占 用 范例: boolean occupied = mFireflyApi.isGpioOccupied(263);//GPIO8_A7的gpio节点为263 解析gpio的节点值 函数:public int gpioParse(String gpioStr) 描述: 解析gpio的节点值,例GPIO8_A7转换为节点263 参数:gpioStr 返回:解析 失败返回-1 范例: int gpioValue= mFireflyApi.gpioParse("GPIO8_A7");//GPIO8_A7的gpio节点为263 设置USB电源,选择控制OTG或USB接口 函数:public boolean setUsbPower(int type, boolean connect ) 描述:设置USB电源,选择控制OTG或USB接口 参 数:type TYPE_USBHOST //控制USB口       TYPE_OTG //控制 OTG口       connect 返回:获取失败返回-1 范例: mFireflyApi.setUsbPower("TYPE_USBHOST",ture);//连接USB HOST mFireflyApi.setUsbPower("TYPE_USBHOST",false);//断开USB HOST mFireflyApi.setUsbPower("TYPE_OTG",ture);//连接OTG mFireflyApi.setUsbPower("TYPE_OTG",false);//断开OTG 注意: 由于硬件设 计不同,3128板型机器OTG接口连接主机时无法断电。 串口使用 导入头文件 import com.firefly.api.serialport.SerialPort; import com.firefly.api.serialport.SerialPort.Callback; import com.firefly.api.serialport.SerialPortFinder; 根据路径和波特率打开串口,并设置回调函数 private boolean openSerialPort(String path,int baudrate) { try { SerialPort mSerialPort = new SerialPort(new File(path), baudrate, 0); mSerialPort.setCallback(new Callback() { @Override public void onDataReceived(byte[] buffer, int size) { // TODO Auto-generated method stub String result = new String(buffer, 0, size); Log.d(TAG, "onDataReceived:"+result); } }); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.d(TAG, "open serialport("+path +") error:"+e.toString()); return false; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.d(TAG, "open serialport("+path +") error:"+e.toString()); return false; } return true; } 向串口发送字符串 mSerialPort.sendMsg("112233445566"); 关闭串口 mSerialPort.closeSerialPort(); 3.4 安装升级 本地ota包升级 函数:public void installPackage(String path) 描述:将 重启进行ota包升级,目前仅支持放置在内置存储根目录,即/sdcard/下 参数: path ota包的绝对路径 范例: mFireflyApi.installPackage("/mnt/sdcard/update.zip"); 重启进入Recovery 函数:public void rebootRecovery() 描述:重启进入 Recovery 范例: mFireflyApi.rebootRecovery(); 3.5 网络 网络功能需要添加以下权限: android.permission.ACCESS_NETWORK_STATE android.permission.CHANGE_NETWORK_STATE android.permission.WRITE_SETTINGS 获取设备以太网的MAC地址 函数:public String getEthMacAddress() 描述 :获取设备以太网的MAC地址 返回:失败返回null 范例: String ethMac = mFireflyApi.getEthMacAddress(); 获取设备以太网的IP地址 函数:public String getEthIpAddress() 描述: 获取设备以太网的IP地址 范例: String ip = mFireflyApi.getEthIpAddress(); 获取设备以太网的信息 函数:public EthernetInfo getEthInfo() 描述:获 取设备以太网的信息(包含:ip,netmask,gateway,dns1,dns2) 范例: EthernetInfo info = mFireflyApi.getEthInfo(); debug(info.isUseStatic()?"Static":"DHCP"+"\n"); debug("IpAddress:"+info.getIpAddress()+"\n"); debug("Netmask:"+info.getNetmask()+"\n"); debug("Gateway:"+info.getGateway()+"\n"); debug("Dns1:"+info.getDns1()+"\n"); debug("Dns2:"+info.getDns2()+"\n"); 设置设备以太网的IP地址 函数:public boolean setEthIPAddress(boolean use_static_ip,String mIpaddr, String mMask, String mGw, String mDns1,String mDns2) 描述:设置设备以太网的IP地址 参数:use_static_ip true为静态ip时其他参数才有效,否则false时为动态ip自动获取ip 返回:失败 返回false 范例: boolean set_static_ip = mFireflyApi.setEthIPAddress(true,"192.168.31.1",.....); boolean set_dhcp_ip = mFireflyApi.setEthIPAddress(false,null,null,null,null,null); 以太网当前是否连接 函数:public boolean isEthConnect() 描述:以太网当 前是否连接 范例: boolean connect = mFireflyApi.isEthConnect(); 设置以太网开启/关闭 函数:public boolean setEthernetEnabled(boolean enabled) 描述:设置以太网开启/关闭 参数:enabled true(开启)/false(关闭 ) 范例: boolean connect = mFireflyApi.isEthConnect(); 获取当前网络连接的类型 函数:public String getCurNetworkType() 描述: 获取当前网络连接的类型 返回:UNKNOWN/WIFI/ETHERNET/MOBILE 备注:使用 BroadcatReceiver通过监听ETHERNET_STATE_CHANGED_ACTION = "android.net.ethernet.ETHERNET_STATE_CHANGED"    来实现对以太网 ConnectState变化的监听.    int connectState=intent.getIntExtra("ethernet_state", -1) 范例: String netType = mFireflyApi.getCurNetworkType(); 3.6 外部存储相关 获取外部存储U盘路径 函数:public String getUSBPath(int num) 描述:获 取外部存储U盘路径 参数:num u盘的index 返回:失败返回null 范例: String usb1_path = mFireflyApi.getUSBPath(1); 获取外部存储SD卡路径 函数:public String getSDcardPath() 描述:获取外 部存储SD卡路径 返回:失败返回null 范例: String sd_path = mFireflyApi.getSDcardPath(); 卸载外部存储 函数:public void doUnmountVolume(String path,boolean force,boolean removeEncryption) 描述:卸载外部存储 参数:path 路径为 volume mountPoint,负责会抛错    force 强制卸载,为false时被占用的 设备不会卸载  removeEncryption 为ture时,包含了force为true,此时会 强制卸载并移除加密映射 /* * If force is not set, we do not unmount if there are * processes holding references to the volume about to be unmounted. * If force is set, all the processes holding references need to be * killed via the ActivityManager before actually unmounting the volume. * This might even take a while and might be retried after timed delays * to make sure we dont end up in an instable state and kill some core * processes. * If removeEncryption is set, force is implied, and the system will remove any encryption * mapping set on the volume when unmounting. */ 备注:调用此接口卸载外 部存储时,先用StorageList.getVolumeState来检测path的挂载状态,为 Environment.MEDIA_MOUNTED时再卸载 范例: StorageList mStorageList = new StorageList(context); if(Environment.MEDIA_MOUNTED.equals(mStorag eList.getVolumeState(path))) mFireflyApi.doUnmountVolume("/mnt/sdcard/",true,false); 3.7 定时开关机 定时开关机已经在系统里面内置了一个定时开关机apk,通过与其交互实现了几 种定时开关机的功能 注:rk3399 平台不支持预置定时开关机功能 3.7.1 预置定时开关机功能 设置一次定时开机 函数:public void setPowerOnAlarm(boolean enabled,long alarm_time) 描述:指定UTC时间,设置定时开机,仅一次不会重 复 参数:enabled 开启/关闭 alarm_time 开机时间(UTC时间) 范例: mFireflyApi.setPowerOnAlarm(true,System.currentTimeMillis()+60); //设 置1分钟后开机 设置重复定时开机 函数:setPowerOnAlarmRepeat( boolean enabled,int hour, int minutes,DaysOfWeek daysofweek) 描述:以周为单位,设置循环的 定时开机的时间 参数:enabled 开启/关闭 hour 开机时间的小时 minutes 开机时间的分钟 daysOfWeek 以周为单位重复,设置定时开机 的日期        SUNDAY -> MONDAY 0b1111111 范例: mFireflyApi.setPowerOnAlarmRepeat(true,10,30,0b1000011); //设置周一、 二、日10点30分开机 获取定时开机状态 函数:public Alarm getPowerOnAlarm() 描述:获取定时 开机状态 范例: Alarm powerOnAlarm =mFireflyApi.getPowerOnAlarm(); 设置一次定时关机 函数:public void setPowerOffAlarm(boolean enabled,long alarm_time) 描述:指定UTC时间,设置定时关机,仅一次不会重 复 参数:enabled 开启/关闭 alarm_time 关机时间(UTC时间) 范例: mFireflyApi.setPowerOffAlarm(true,System.currentTimeMillis()+60); //设 置1分钟后开机 设置重复定时关机 函数:setPowerOffAlarmRepeat( boolean enabled,int hour, int minutes,DaysOfWeek daysofweek) 描述:以周为单位,设置循环的 定时开机的时间 参数:enabled 开启/关闭 hour 开机时间的小时 minutes 开机时间的分钟 daysOfWeek 以周为单位重复,设置定时开机 的日期        SUNDAY -> MONDAY 0b1111111 范例: mFireflyApi.setPowerOffAlarmRepeat(true,10,30,0b1000011); //设置周一、 二、日10点30分关机 获取定时关机状态 函数:public Alarm getPowerOffAlarm() 描述:获取定时 开机状态 范例: Alarm powerOffAlarm =mFireflyApi.getPowerOffAlarm(); 如果以上的功能无法满足您的需求,可以使用一下接口,自己做逻辑实现功能。 此接口只是最基本的定时开关机功能,由传入的id控制开启/关闭,重启后失效 需要手动再次设置 3.7.2 自定义开关机接口 设置定时开机 函数:public void setSchedulePowerOn(int id,boolean enabled,long alarm_time) 描述:设置定时开机,id由用户定义,用于开启和关 闭定时开机时使用,重启后失效需要重新设置 参数:id 定时开机id enabled 开启/关闭   alarm_time 开机时间(UTC时间) 备注: 通过 多组定时开机id,可以实现多组定时开机功能 范例: mFireflyApi.setSched ulePowerOn("12",true,System.currentTimeMillis()+60); //设置1分钟后开 机,id为12 mFireflyApi.setSchedulePowerOn("12",true,0); //取消id为"12" 操作 设置定时关机 函数:public void setSchedulePowerOff(int id,boolean enabled,long alarm_time) 描述:设置定时关机,id由用户定义,用于开启和关 闭定时关机时使用,重启后失效需要重新设置 参数:id 定时关机id enabled 开启/关闭   alarm_time 关机时间(UTC时间) 备注: 通过 多组定时关机id,可以实现多组定时关机功能 范例: mFireflyApi.setSched ulePowerOff("12",true,System.currentTimeMillis()+60); //设置1分钟后关 机,id为12 mFireflyApi.setSchedulePowerOff("12",true,0); //取消id为 "12"操作