android中PowerProfile类的目的是什么?

时间:2014-02-10 19:27:53

标签: android bluetooth

我的任务是编写一个应用程序,详细说明不同应用程序消耗的功率。我正在查看PowerProfile类,我不确定它究竟用于什么。类

中有这种方法
Returns the average current in mA consumed by the subsystem
Parameters:
type the subsystem type
Returns:
the average current in milliAmps.
public double getAveragePower(String type) {
    if (sPowerMap.containsKey(type)) {
        Object data = sPowerMap.get(type);
        if (data instanceof Double[]) {
            return ((Double[])data)[0];
        } else {
            return (Double) sPowerMap.get(type);
        }
    } else {
        return 0;
    }
}

如果我按如下方式测试它:

String POWER_BLUETOOTH_ACTIVE = "bluetooth.active";
String POWER_PROFILE = "com.android.internal.os.PowerProfile";
try{
    Constructor[] constructors = Class.forName(POWER_PROFILE).getConstructors();
    Constructor c = constructors[0];
    Class[] paramTypes = c.getParameterTypes();
    Object params = (Object) this.getActivity().getBaseContext();
    Object filledObject = c.newInstance(params);
    Method batteryMeth1 = Class.forName(POWER_PROFILE).getMethod("getAveragePower", String.class);
    Object barglist1[] = new Object[1];
    barglist1[0] = new Object[1];
    barglist1[0] = POWER_BLUETOOTH_ACTIVE;
    double btlife = (Double) btMeth1.invoke(filledObject, barglist1);
    Log.d("BatteryLog", "average BT active mAH " + btlife);
    btInfo.setText("avg bt mAH is " + btlife);
}
catch (Exception e)
{
    Log.d("BTLOg", "average BT active mAH " + btlife);
}

然后我总是得到38.8的蓝牙mAH使用,即使我在运行之间使用我的蓝牙一堆。这是正常的,为什么我总能获得相同的mAH值?

1 个答案:

答案 0 :(得分:0)

蓝牙在与其他设备或发送/接收模式配对时消耗功率。配对模式负责发现附近的有源蓝牙,然后第一次建立连接以获得MAC地址&蓝牙的名字。这就像你要打电话给一个美丽的陌生人(配对),它需要很大的勇气,不是吗?然后你可以进行对话(发送/接收模式)。无论是否有数据流,配对模式下的功耗都比蓝牙传输/接收模式更大(更勇气)。但对于嵌入在您设备中的某些蓝牙模块,有一些蓝牙支持的睡眠模式。睡眠模式下的功耗很小。

所以在你的情况下,也许蓝牙已经处于配对模式,所以消耗相同的量。尝试配对蓝牙或发现bluetooth in Android它可能消耗更多的电力