android中PowerProfile类的用途是什么

android中PowerProfile类的用途是什么,android,bluetooth,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

我的任务是编写一个应用程序,获取不同应用程序所消耗电量的详细信息。我正在查看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值?

蓝牙在与其他设备配对或发送/接收模式时会耗电。配对模式负责发现附近的活动蓝牙,然后首次建立连接以获取蓝牙的MAC地址和名称。就像你要向一对美丽的陌生人打招呼,这需要很大的勇气,不是吗?然后,您可以在发送/接收模式下进行对话。无论是否有数据流,配对模式下的功耗都比蓝牙传输/接收模式下的功耗更大。但对于设备中嵌入的某些蓝牙模块,有一些支持蓝牙的睡眠模式。睡眠模式下的功耗非常小


因此,在您的情况下,可能蓝牙已经处于配对模式,因此其消耗量相同。尝试将bluetooth或discovery配对它可能会消耗更多的电量

对于我的bluetooth活动,我实际上在使用我编写的一个应用程序,它调用sdptool browse、sdptool records和sdptool search,我使用了搜索的每个UUID,每个UUID都启用了树标志,因此我的搜索功能非常强大。我也有一次配对。我想真正的问题是,这些mAH值是静态的还是动态的?它们对我来说似乎是静止的,但我只尝试了蓝牙。你到底在寻找什么?您是否试图为每个配置文件SPP、A2DP等获取不同的功耗?这很好,但不,这不是我的目标-我真的试图为功率配置文件类中的不同活动获取不同的功耗无线电扫描、wifi扫描、蓝牙活动、wi-fi活动等。嗯,我只玩过一个蓝牙模块HC-05,无论如何,我无法回答你的问题。但是,根据数据表,无论是否传输/接收数据,配对时模块消耗25mA,插座连接时消耗8mA。所以我想它的工作原理与你的Android中的蓝牙相同。顺便问一下,您想连接什么类型的设备?安卓还是远程设备?您是否尝试过对程序的每次发现、配对和传输进行单一测试?我当时使用的是HTC One-X手机,而我的远程设备是另一款android手机LG L86C。我使用的应用程序只执行了我上面提到的三个服务发现步骤,然后建立了一个免提连接来查询CHLD和BRSF值。我做了三个测试——一个是我在没有做任何蓝牙活动的情况下调用这个方法,一个是我在运行一次应用程序后调用这个方法,还有一个是我在多次运行应用程序后调用这个方法,结果都报告了38.8 mAH,尽管现在我想起来了,我并没有同时运行这两个应用程序。我试试看。