【问题标题】:How do I use Android PowerProfile private API?如何使用 Android PowerProfile 私有 API?
【发布时间】:2011-12-27 09:09:48
【问题描述】:

我从以下链接下载了源代码并添加到我的项目中。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/com/android/internal/os/PowerProfile.java

我得到了,它找不到如下所示的 R 文件。

 int id = com.android.internal.R.xml.power_profile;

也无法导入

import com.android.internal.util.XmlUtils;

我基本上想测量Android设备的功耗。

提前致谢。

【问题讨论】:

  • 如果它不是公共 API 的一部分,那么它可能要么不起作用,要么非常困难。即使你设法让它工作,你用来让它工作的任何手段都可能在某个时候被操作系统更新破坏。

标签: android


【解决方案1】:

个人使用打补丁的 android.jar 会让人头疼,使用反射是访问 PowerProfile.java 的一种“简单”方式。但正如@FoamyGuy 和无数其他人所指出的,这是隐藏的 api,所以将它包装在一个大的 try catch 中,因为它可能会在更高版本的 Android 上中断。

Class<?> powerProfileClazz = Class.forName("com.android.internal.os.PowerProfile");

//get constructor that takes a context object
Class[] argTypes = { Context.class };
Constructor constructor = powerProfileClazz
            .getDeclaredConstructor(argTypes);
Object[] arguments = { context };
//Instantiate
Object powerProInstance = constructor.newInstance(arguments);

//define method
Method batteryCap = powerProfileClazz.getMethod("getBatteryCapacity", null);

//call method 
Log.d(TAG, batteryCap.invoke(powerProInstance, null).toString());

【讨论】:

    【解决方案2】:

    是的,您可以访问内部 API,即 com.android.internal.os.PowerProfile

    只需查看this link,然后按照步骤进行操作即可。

    【讨论】:

      【解决方案3】:

      你可以使用

      int id = Resources.getSystem().getIdentifier("power_profile", "xml", "android");
      

      但请注意 FoamyGuy 的评论。

      【讨论】:

        【解决方案4】:

        最简单的方法是下载 android 的 framework.jar 并将其作为外部库包含在您的项目中。在您的 android 项目中包含 framework.jar 后,您可以找到该资源文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-19
          • 1970-01-01
          • 1970-01-01
          • 2019-08-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多