就是从文件中读值,由于电流变化太快,显示的是连续读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();    }}

更多相关文章

  1. Android(安卓)以图找图功能
  2. Android(安卓)G711A 音频编解码,去除“吱吱”电流声,附上so下载地
  3. Android关机充电流程
  4. Android(安卓)Studio 在 Mac 上如何真机调试
  5. 关于 android 通过 python 统计 fps
  6. rk3288 android 5.1 EC20 4G module调试
  7. Android Tel 拨打电话及来电流程分析
  8. Android dumpsys cpuinfo 信息解读
  9. Android中巧妙的位运算

随机推荐

  1. 浅谈Android的Rotation动画的应用
  2. Android(安卓)文件格式
  3. Android的权限控制机制
  4. Android属性动画,从源码的角度分析
  5. android Service之四:传递复杂数据类型的
  6. 【android基础】之Android返回键处理(事
  7. Android(安卓)- GridView,自定义开关控件,
  8. eclipse下android的sdk配置问题
  9. Android中Activity组件详解
  10. Android(安卓)Private Libraries 和 Depe