新增电池信息

This commit is contained in:
xsean 2025-12-16 15:10:31 +08:00
parent b48f9c4856
commit 894c569744
4 changed files with 204 additions and 3 deletions

67
README.md Normal file
View 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: 允许该应用使用指纹硬件进行身份验证

View File

@ -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>

View File

@ -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
)
}
}

View File

@ -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)