Commit 4b65f1a7 authored by wanglei's avatar wanglei

...

parent d8150eaf
......@@ -3,6 +3,7 @@ package com.base.filerecoveryrecyclebin.activity.battery
import android.annotation.SuppressLint
import android.content.IntentFilter
import android.graphics.Color
import android.os.BatteryManager
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
......@@ -21,6 +22,7 @@ import kotlinx.coroutines.launch
import java.io.BufferedReader
import java.io.FileReader
class BatteryActivity : BaseActivity<ActivityBatteryBinding>() {
private val TAG = "BatteryActivity"
......@@ -30,6 +32,8 @@ class BatteryActivity : BaseActivity<ActivityBatteryBinding>() {
}
private lateinit var batteryReceiver: BatteryReceiver
private lateinit var mBatteryManager: BatteryManager
@SuppressLint("SetTextI18n")
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
......@@ -43,18 +47,20 @@ class BatteryActivity : BaseActivity<ActivityBatteryBinding>() {
addAction("android.intent.action.BATTERY_CHANGED")
})
getAverageCurrent()
lifecycleScope.launch(Dispatchers.Main) {
currentFlow.collectLatest {
binding.tvElectric.text = "${it}mA"
}
}
lifecycleScope.launch(Dispatchers.Main) {
averageFlow.collectLatest {
binding.tvCurrentAverage.text = "${it}mA"
}
}
mBatteryManager = getSystemService(BATTERY_SERVICE) as BatteryManager
// getAverageCurrent()
//
// lifecycleScope.launch(Dispatchers.Main) {
// currentFlow.collectLatest {
// binding.tvElectric.text = "${it}mA"
// }
// }
// lifecycleScope.launch(Dispatchers.Main) {
// averageFlow.collectLatest {
// binding.tvCurrentAverage.text = "${it}mA"
// }
// }
AdmobMaxHelper.admobMaxShowNativeAd(this, binding.flAd, 2)
}
......@@ -62,81 +68,91 @@ class BatteryActivity : BaseActivity<ActivityBatteryBinding>() {
@SuppressLint("SetTextI18n")
private fun updateUi() {
val temperature = BatteryReceiver.temperature / 10f
binding.tvTemperature.text = "%.1f °C".format(temperature)
binding.tvTemperature.text = format(temperature)
binding.tvVoltage.text = "${BatteryReceiver.voltage}mV"
binding.tvVoltage.text = "${format((BatteryReceiver.voltage / 1000f))} mV"
binding.tvTechnology.text = BatteryReceiver.technology
binding.tvCapacity.text = "${BatteryReceiver.mAh.toInt()}mAh"
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(batteryReceiver)
}
binding.tvCapacity.text = "${BatteryReceiver.mAh.toInt()} mAh"
val currentNow = mBatteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW)
binding.tvElectric.text = "${currentNow} mA"
@SuppressLint("PrivateApi")
fun getBatteryFilePath(): String {
val systemProperties = Class.forName("android.os.SystemProperties")
val getMethod = systemProperties.getDeclaredMethod("get", String::class.java)
val platName = getMethod.invoke(null, "ro.hardware") as String
LogEx.logDebug(TAG, "platName=$platName")
val filePath: String = if (platName.startsWith("mt") || platName.startsWith("MT")) {
"/sys/class/power_supply/battery/device/FG_Battery_CurrentConsumption"
// MTK平台该值不区分充放电,都为负数
} else if (platName.startsWith("qcom")) {
"/sys/class/power_supply/battery/current_now"
} else if (platName.startsWith("exynos"))
"/sys/class/power_supply/battery/BatteryAverageCurrent"
else {
""
}
LogEx.logDebug(TAG, "filePath=$filePath")
return filePath
val currentAverage: Int = mBatteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_AVERAGE)
binding.tvCurrentAverage.text = "${currentAverage} mA"
}
fun format(float: Float): String {
return "%.1f °C".format(float)
}
var mAverageFlow = MutableSharedFlow<Float>()
val averageFlow: SharedFlow<Float> = mAverageFlow
var mCurrentFlow = MutableSharedFlow<Int>()
var currentFlow: SharedFlow<Int> = mCurrentFlow
private fun getAverageCurrent(filePath: String = getBatteryFilePath()) {
var sum = 0
var loopCount = 0
lifecycleScope.launch(Dispatchers.IO) {
while (isActive) {
val currentValue = readFileValue(filePath)
mCurrentFlow.emit(currentValue)
sum += currentValue
loopCount++
val average = sum / loopCount.toFloat()
mAverageFlow.emit(average)
delay(150)
}
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(batteryReceiver)
}
private fun readFileValue(filePath: String): Int {
var value = 0
var br: BufferedReader? = null
try {
br = BufferedReader(FileReader(filePath))
val line = br.readLine()
value = line?.toInt() ?: 0
LogEx.logDebug(TAG, "readFileValue value=$value")
} catch (e: Exception) {
e.printStackTrace()
} finally {
br?.close()
}
return value
}
// @SuppressLint("PrivateApi")
// fun getBatteryFilePath(): String {
// val systemProperties = Class.forName("android.os.SystemProperties")
// val getMethod = systemProperties.getDeclaredMethod("get", String::class.java)
// val platName = getMethod.invoke(null, "ro.hardware") as String
//
// LogEx.logDebug(TAG, "platName=$platName")
// val filePath: String = if (platName.startsWith("mt") || platName.startsWith("MT")) {
// "/sys/class/power_supply/battery/device/FG_Battery_CurrentConsumption"
// // MTK平台该值不区分充放电,都为负数
// } else if (platName.startsWith("qcom")) {
// "/sys/class/power_supply/battery/current_now"
// } else if (platName.startsWith("exynos"))
// "/sys/class/power_supply/battery/BatteryAverageCurrent"
// else {
// ""
// }
// LogEx.logDebug(TAG, "filePath=$filePath")
// return filePath
// }
// var mAverageFlow = MutableSharedFlow<Float>()
// val averageFlow: SharedFlow<Float> = mAverageFlow
//
// var mCurrentFlow = MutableSharedFlow<Int>()
// var currentFlow: SharedFlow<Int> = mCurrentFlow
// private fun getAverageCurrent(filePath: String = getBatteryFilePath()) {
// var sum = 0
// var loopCount = 0
// lifecycleScope.launch(Dispatchers.IO) {
// while (isActive) {
// val currentValue = readFileValue(filePath)
// mCurrentFlow.emit(currentValue)
// sum += currentValue
// loopCount++
// val average = sum / loopCount.toFloat()
// mAverageFlow.emit(average)
// delay(150)
// }
// }
// }
// private fun readFileValue(filePath: String): Int {
// var value = 0
// var br: BufferedReader? = null
// try {
// br = BufferedReader(FileReader(filePath))
// val line = br.readLine()
// value = line?.toInt() ?: 0
// LogEx.logDebug(TAG, "readFileValue value=$value")
// } catch (e: Exception) {
// e.printStackTrace()
// } finally {
// br?.close()
// }
// return value
// }
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment