新增电池信息
This commit is contained in:
parent
b48f9c4856
commit
894c569744
67
README.md
Normal file
67
README.md
Normal file
@ -0,0 +1,67 @@
|
||||
## 获取 CPU 信息
|
||||
val cpuInfo = AndInfo.instance.cpu
|
||||
|
||||
## 获取设备信息
|
||||
val deviceInfo = AndInfo.instance.device
|
||||
|
||||
## 获取显示信息
|
||||
val displayInfo = AndInfo.instance.display
|
||||
|
||||
## 获取传感器信息
|
||||
val sensorInfo = AndInfo.instance.sensor
|
||||
|
||||
## 获取系统构建信息
|
||||
val buildInfo = AndInfo.instance.build
|
||||
|
||||
## 获取 GPU 信息
|
||||
val gpuInfo = AndInfo.instance.gpu
|
||||
|
||||
## 获取输入设备信息
|
||||
val inputInfo = AndInfo.instance.input
|
||||
|
||||
## 获取摄像头信息
|
||||
val cameraInfo = AndInfo.instance.camera
|
||||
|
||||
## 获取蓝牙信息
|
||||
val bluetoothInfo = AndInfo.instance.bluetooth
|
||||
|
||||
## 获取存储信息
|
||||
val storageInfo = AndInfo.instance.storage
|
||||
|
||||
## 获取应用信息
|
||||
val appInfo = AndInfo.instance.app.getInstalledApps()
|
||||
|
||||
|
||||
权限
|
||||
|
||||
Permission: android.permission.POST_NOTIFICATIONS, Description: 允许该应用显示通知
|
||||
Permission: android.permission.ACCESS_COARSE_LOCATION, Description: 当您使用此应用时,此应用可以通过位置信息服务获取您的大致位置信息。您必须开启设备的位置信息服务,此应用才能获取位置信息。
|
||||
Permission: com.android.vending.BILLING, Description: 允许用户在此应用中通过 Google Play 购买商品。
|
||||
Permission: android.permission.BLUETOOTH, Description: 允许该应用查看手机上的蓝牙配置,以及与配对设备建立连接或接受其连接请求。
|
||||
Permission: android.permission.BLUETOOTH_ADMIN, Description: 允许应用配置本地蓝牙手机,并允许其查找远程设备且与之配对。
|
||||
Permission: android.permission.BLUETOOTH_CONNECT, Description: 允许该应用连接到已配对的蓝牙设备
|
||||
Permission: android.permission.BLUETOOTH_SCAN, Description: 允许该应用发现附近的蓝牙设备并与其配对
|
||||
Permission: android.permission.TRANSMIT_IR, Description: 允许应用使用手机的红外线发射器。
|
||||
Permission: android.permission.READ_PHONE_STATE, Description: 允许该应用访问设备的电话功能。此权限可让该应用确定本机号码和设备 ID、是否正处于通话状态以及拨打的号码。
|
||||
Permission: android.permission.INTERNET, Description: 允许该应用创建网络套接字和使用自定义网络协议。浏览器和其他某些应用提供了向互联网发送数据的途径,因此应用无需该权限即可向互联网发送数据。
|
||||
Permission: android.permission.ACCESS_NETWORK_STATE, Description: 允许该应用查看网络连接的相关信息,例如存在和连接的网络。
|
||||
Permission: android.permission.ACCESS_WIFI_STATE, Description: 允许该应用查看 WLAN 网络的相关信息,例如是否启用了 WLAN 以及连接的 WLAN 设备的名称。
|
||||
Permission: android.permission.VIBRATE, Description: 允许应用控制振动器。
|
||||
Permission: android.permission.BATTERY_STATS, Description: No description available
|
||||
Permission: android.permission.DUMP, Description: No description available
|
||||
Permission: android.permission.PACKAGE_USAGE_STATS, Description: No description available
|
||||
Permission: android.permission.RECORD_AUDIO, Description: 当您使用此应用时,它可以使用麦克风录音。
|
||||
Permission: android.permission.CHANGE_WIFI_STATE, Description: 允许该应用与WLAN接入点建立和断开连接,以及更改WLAN网络的设备配置。
|
||||
Permission: android.permission.ACCESS_FINE_LOCATION, Description: 当您使用此应用时,此应用可以通过位置信息服务获取您的确切位置信息。您必须开启设备的位置信息服务,此应用才能获取位置信息。这可能会增加耗电量。
|
||||
Permission: com.google.android.providers.gsf.permission.READ_GSERVICES, Description: 允许此应用读取 Google 服务配置数据。
|
||||
Permission: android.permission.RECEIVE_BOOT_COMPLETED, Description: 允许应用在系统完成引导后立即自动启动。这样可能会延长手机的启动时间,并允许应用始终运行,从而导致手机总体运行速度减慢。
|
||||
Permission: android.permission.CAMERA, Description: 当您使用此应用时,它可以使用相机拍摄照片和录制视频。
|
||||
Permission: android.permission.FOREGROUND_SERVICE, Description: 允许该应用使用前台服务。
|
||||
Permission: android.permission.REQUEST_DELETE_PACKAGES, Description: 允许应用请求删除文件包。
|
||||
Permission: android.permission.QUERY_ALL_PACKAGES, Description: 允许应用查看所有已安装的软件包。
|
||||
Permission: android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, Description: 允许应用请求相应的权限,以便忽略针对该应用的电池优化。
|
||||
Permission: android.permission.WAKE_LOCK, Description: 允许应用阻止手机进入休眠状态。
|
||||
Permission: android.permission.SYSTEM_ALERT_WINDOW, Description: 此应用可显示在其他应用上方或屏幕的其他部分。这可能会妨碍您正常地使用应用,且其他应用的显示方式可能会受到影响。
|
||||
Permission: android.permission.FOREGROUND_SERVICE_SPECIAL_USE, Description: 允许该应用使用“specialUse”类型的前台服务
|
||||
Permission: android.permission.USE_BIOMETRIC, Description: 允许该应用使用生物特征硬件进行身份验证
|
||||
Permission: android.permission.USE_FINGERPRINT, Description: 允许该应用使用指纹硬件进行身份验证
|
||||
@ -1,11 +1,44 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<manifest xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
|
||||
tools:ignore="QueryAllPackagesPermission" />
|
||||
<uses-permission android:name="android.permission.BATTERY_STATS"
|
||||
tools:ignore="ProtectedPermissions" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="acom.android.vending.BILLING" />
|
||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
|
||||
<uses-permission android:name="android.permission.TRANSMIT_IR" />
|
||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.DUMP"
|
||||
tools:ignore="ProtectedPermissions" />
|
||||
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
|
||||
tools:ignore="ProtectedPermissions" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="acom.google.android.providers.gsf.permission.READ_GSERVICES" />
|
||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
|
||||
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
|
||||
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
|
||||
|
||||
<application android:name=".AndInfoApp">
|
||||
</application>
|
||||
</manifest>
|
||||
|
||||
@ -0,0 +1,101 @@
|
||||
package com.xyzshell.andinfo.libs
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.os.BatteryManager
|
||||
|
||||
data class BatteryDetails(
|
||||
val percentage: Int, // 0-100 电池百分比
|
||||
val isCharging: Boolean, // 是否正在充电
|
||||
val currentNow: Int?, // in mA 当前电流
|
||||
val powerUsage: Double?, // in W 功率消耗
|
||||
val temperature: Double, // in Celsius 温度 摄氏度
|
||||
val health: String, // 健康状态
|
||||
val voltage: Int, // in mV 电压
|
||||
val maxInput: Int?, // in mA 最大输入电流
|
||||
val capacity: Double?, // in mAh 电池容量
|
||||
val chargeCounter: Int?, // in mAh 电量计量
|
||||
val chargeCycles: Int? // estimated cycles 充电周期 (估计值)
|
||||
)
|
||||
|
||||
class BatteryInfo(private val context: Context) {
|
||||
|
||||
fun getBatteryDetails(): BatteryDetails {
|
||||
val intentFilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
|
||||
val batteryStatus = context.registerReceiver(null, intentFilter)
|
||||
val batteryManager = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
|
||||
|
||||
// 电池百分比
|
||||
val level = batteryStatus?.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) ?: -1
|
||||
val scale = batteryStatus?.getIntExtra(BatteryManager.EXTRA_SCALE, -1) ?: -1
|
||||
val percentage = if (level >= 0 && scale > 0) (level * 100 / scale) else -1
|
||||
|
||||
// 是否充电
|
||||
val status = batteryStatus?.getIntExtra(BatteryManager.EXTRA_STATUS, -1) ?: -1
|
||||
val isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL
|
||||
|
||||
// 当前电流 (mA)
|
||||
val currentNow = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW)?.let {
|
||||
it / 1000 // 转换为 mA
|
||||
}
|
||||
|
||||
// 电压 (mV)
|
||||
val voltage = batteryStatus?.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1) ?: -1
|
||||
|
||||
// 温度 (摄氏度)
|
||||
val temperature = (batteryStatus?.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1) ?: -1) / 10.0
|
||||
|
||||
// 健康状态
|
||||
val health = when (batteryStatus?.getIntExtra(BatteryManager.EXTRA_HEALTH, -1) ?: -1) {
|
||||
BatteryManager.BATTERY_HEALTH_GOOD -> "Good"
|
||||
BatteryManager.BATTERY_HEALTH_OVERHEAT -> "Overheat"
|
||||
BatteryManager.BATTERY_HEALTH_DEAD -> "Dead"
|
||||
BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE -> "Over Voltage"
|
||||
BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE -> "Failure"
|
||||
BatteryManager.BATTERY_HEALTH_COLD -> "Cold"
|
||||
else -> "Unknown"
|
||||
}
|
||||
|
||||
// 最大输入电流 (mA)
|
||||
val maxInput = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE)?.let {
|
||||
it / 1000 // 转换为 mA
|
||||
}
|
||||
|
||||
// 电池容量 (mAh)
|
||||
val capacity = batteryManager.getLongProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)?.toDouble()
|
||||
|
||||
// 电量计量 (mAh)
|
||||
val chargeCounter = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER)?.let {
|
||||
it / 1000 // 转换为 mAh
|
||||
}
|
||||
|
||||
// 耗电量 (W)
|
||||
val powerUsage = if (currentNow != null && voltage > 0) {
|
||||
(currentNow * voltage) / 1_000_000.0 // 转换为 W
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
// 充电周期 (估计值)
|
||||
val chargeCycles = capacity?.let { cap ->
|
||||
chargeCounter?.let { counter ->
|
||||
(counter / cap).toInt()
|
||||
}
|
||||
}
|
||||
|
||||
return BatteryDetails(
|
||||
percentage = percentage,
|
||||
isCharging = isCharging,
|
||||
currentNow = currentNow,
|
||||
powerUsage = powerUsage,
|
||||
temperature = temperature,
|
||||
health = health,
|
||||
voltage = voltage,
|
||||
maxInput = maxInput,
|
||||
capacity = capacity,
|
||||
chargeCounter = chargeCounter,
|
||||
chargeCycles = chargeCycles
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -48,7 +48,7 @@ class MainScrollActivity : BaseActivity<ActivityMainBinding>() {
|
||||
})
|
||||
}) { tab, position ->
|
||||
tab.text = stringArray[position]
|
||||
// tab.setCustomView(R.layout.custom_tab)
|
||||
// tab.setCustomView(R.layout.custom_ta
|
||||
//
|
||||
// tab.customView?.run {
|
||||
// val indicator: ImageView = findViewById(R.id.image_indicator)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user