AndroidTV获取设备常用信息

AndroidTV device info demo based on Java

Posted by Nathan on April 19, 2020

人生中那些有意义的事,大多都是有代价的

Very few things that are worthwhile in life come without a cost

前言

在Android开发过程中,我会经常使用串口或者adb命令直接来调试以及查看设备的相关信息,比如查看网络的IP、MAC啦,cat一些参数啊,或者getprop等都比较方便。但是对于用户或者非开发者来说就不能这么操作了,因此针对一些常用的参数获取,开发了一个demo,并封装了常用的调用接口,满足常用的功能获取与展示。

接口总结

有些设备信息需要系统签名权限,而有些则SDK中自带了,所以根据权限不同,本文分为两大接口,系统级API非系统级API,我这里总结了大部分常用的功能接口,如下:

非系统级权限接口(NonSystemDeviceInfoApi)

  • getCpuNumber() //查看CPU 个数

  • getCpuInfo() //获取所有CPU相关的信息 (cat /proc/cpuinfo)返回结果如下图

    cpuinfo

  • getFreeMemInfo() //获取当前时刻的剩余内存空间

  • getTotalMemInfo() //获取总内存的空间

  • getTotalExternalFlashSize() //获取Sdcard总空间

  • getAvailableExternalFlashSize() //获取Sdcard可用空间

  • exeShellCmd(String cmd) //执行shell脚本的接口,例如:ls 等常用linux以及andorid命令

  • getTotalNetworkRxBytes() //获取当前有线网卡和wifi的总流量之和的数据,

  • getProp() //在shell下执行getprop后返回的数据

    (注意:调用此接口返回的数据总数,会比签名后调用的数据少一些,因为有些属性在普通权限下无法获取)

    cpuinfo

  • 增加新接口String[] getSystemLogcatPids() 通过执行shell 命令拿到目前logcat进程的所有pid信息

系统级权限接口(SystemDeviceInfoApi)

  • getMaxCpuFreq() //查看CPU的最大频率

  • getMinCpuFreq() //查看CPU的最小频率

    cpuinfo

  • getSerialNo() //获取设备序列号ro.serial.no,经过测试验证,必须要签名才能获取

  • getEthernetMacAddress() //获取有线网卡MAC地址

  • getWifiMacAddress() //获取wifi网卡MAC地址

  • getEthIpAddress() //获取有线网卡IP地址

  • getWifiIpAddress() //获取Wifi的IP地址

    cpuinfo

  • getGpuFreqRange() //获取GPU的频率范围(根据平台不同,会有差异,目前以RTK1319平台为测试)

  • String[][] getAllNetData() // 获取有线网卡和Wifi的各自流量,可以计算实时网速(通过cat /proc/self/net/dev命令获取相关参数)

  • 增加获取cpu使用率的接口getCurCpuRate

  • 增加系统唤醒接口forceSystemWakeUp

  • 增加系统待机接口forceSystemStandby

  • 增加系统重启接口forceSystemReboot

  • 增加判断当前是否待机接口isSystemStandby

  • 增加恢复出厂接口factoryReset

  • 增加获取system进程pid的接口getSystemProcessPid

  • 增加kill system进程pid的接口killSystemProcessPid

  • 增加获取root进程pid的接口getRootProcessPid

  • 增加kill root进程pid的接口killRootProcessPid

  • 增加静默卸载app接口uninstallPkg

新增蓝牙接口

BluetoothDeviceInfoApi.java

- 获取绑定列表
- 获取设备蓝牙名字
- 获取设备蓝牙MAC
- 使能蓝牙
- 重置蓝牙

新增网络相关接口

NetworkDeviceInfoApi.java

- 获取有线相关信息`getEthernetInfo`
- 获取wifi相关信息 `getWifiItemInfo`
- 设置有线或者wifi相关信息`setNetworkStaticIpInfo`
- 打开wifi,关闭wifi,重置wifi等

新增存储接口

StorageDeviceInfoApi.java

通用BuildInfo接口

Android的SDK提供了android.os.Build用于通用的信息,大家可以直接查看源码,再次不多解释

Demo结构说明

demo地址https://github.com/Nathan-Feng/AndroidTVDeviceInfo

目录结构如下:

cpuinfo

主要包括API接口层,后台服务UI层,接口实现层

附上效果图:

  • 启动页面,需要用户手动来手动授权启动浮窗位置(Settings->Apps->Special app access->Display over other apps->your app->Open(Allowed))

cpuinfo

  • 主页面

cpuinfo

  • 所有效果

cpuinfo

如果觉得有用,欢迎给个Star,Thank you