Android之查看手机实时电流、电压
16lz
2021-01-24
就是从文件中读值,由于电流变化太快,显示的是连续读5次的平均值,直接上代码:
public class MainActivity extends Activity { private boolean mIsStart = true; private Toast mToast; private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { showToast(getCurrent()); if (mIsStart) { // 因为Toast.LENGTH_SHORT的默认值是2000 mHandler.sendEmptyMessageDelayed(0, 1900); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mHandler.sendEmptyMessage(0); } @Override protected void onDestroy() { super.onDestroy(); mHandler.removeMessages(0); mIsStart = false; } /** * 获取当前电流 */ private String getCurrent() { String result = "null"; try { Class systemProperties = Class.forName("android.os.SystemProperties"); Method get = systemProperties.getDeclaredMethod("get", String.class); String platName = (String) get.invoke(null, "ro.hardware"); if (platName.startsWith("mt") || platName.startsWith("MT")) { String filePath = "/sys/class/power_supply/battery/device/FG_Battery_CurrentConsumption"; // MTK平台该值不区分充放电,都为负数,要想实现充放电电流增加广播监听充电状态即可 result = "当前电流为:" + Math.round(getMeanCurrentVal(filePath, 5, 0) / 10.0f) + "mA"; result += ", 电压为:" + readFile("/sys/class/power_supply/battery/batt_vol", 0) + "mV"; } else if (platName.startsWith("qcom")) { String filePath ="/sys/class/power_supply/battery/current_now"; int current = Math.round(getMeanCurrentVal(filePath, 5, 0) / 10.0f); int voltage = readFile("/sys/class/power_supply/battery/voltage_now", 0) / 1000; // 高通平台该值小于0时电池处于放电状态,大于0时处于充电状态 if (current < 0) { result = "充电电流为:" + (-current) + "mA, 电压为:" + voltage + "mV"; } else { result = "放电电流为:" + current + "mA, 电压为:" + voltage + "mV"; } } } catch (Exception e) { e.printStackTrace(); } return result; } /** * 获取平均电流值 * 获取 filePath 文件 totalCount 次数的平均值,每次采样间隔 intervalMs 时间 */ private float getMeanCurrentVal(String filePath, int totalCount, int intervalMs) { float meanVal = 0.0f; if (totalCount <= 0) { return 0.0f; } for (int i = 0; i < totalCount; i++) { try { float f = Float.valueOf(readFile(filePath, 0)); meanVal += f / totalCount; } catch (Exception e) { e.printStackTrace(); } if (intervalMs <= 0) { continue; } try { Thread.sleep(intervalMs); } catch (Exception e) { e.printStackTrace(); } } return meanVal; } private int readFile(String path, int defaultValue) { try { BufferedReader bufferedReader = new BufferedReader(new FileReader( path)); int i = Integer.parseInt(bufferedReader.readLine(), 10); bufferedReader.close(); return i; } catch (Exception localException) { } return defaultValue; } private void showToast(String content) { if (mToast == null) { mToast = Toast.makeText(MainActivity.this, content, Toast.LENGTH_SHORT); } else { mToast.setText(content); mToast.setDuration(Toast.LENGTH_SHORT); } mToast.show(); }}
更多相关文章
- Android(安卓)以图找图功能
- Android(安卓)G711A 音频编解码,去除“吱吱”电流声,附上so下载地
- Android关机充电流程
- Android(安卓)Studio 在 Mac 上如何真机调试
- 关于 android 通过 python 统计 fps
- rk3288 android 5.1 EC20 4G module调试
- Android Tel 拨打电话及来电流程分析
- Android dumpsys cpuinfo 信息解读
- Android中巧妙的位运算