Android之查看手机实时电流、电压
2016-12-14 16:48
429 查看
就是从文件中读值,由于电流变化太快,显示的是连续读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();
}
}
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();
}
}
相关文章推荐
- 如何使用ADB命令查看Android手机相关信息参数
- 如何查看android / iphone 手机/平板的Mac地址
- PC使用wireshark直接查看android手机上tcpdump捕捉到的数据包
- 基于Socket的Android手机视频实时传输
- 快速查看android手机信息
- android视频摄制、另一部手机实时观看方案
- 基于Socket的Android手机视频实时传输
- android视频录制、另一部手机实时观看方案
- android手机图片查看
- android手机查看设备ID,deviceID
- ubuntu共享wifi(AP)给安卓(Android)手机,如何查看ubuntu无线网卡是否支持AP(master )模式
- android手机测试中如何查看内存泄露
- 查看中兴V880android手机MAC地址的方法
- android查看手机内存
- android 手机查看指令
- 获取android手机电池的电压和温度;
- 如何查看android手机已记住的wifi密码
- android手机查看保存的wifi密码