当“/sys/class/power\u supply/Battery”不可读时,Android NDK中的电池状态

当“/sys/class/power\u supply/Battery”不可读时,Android NDK中的电池状态,android,c++,android-ndk,Android,C++,Android Ndk,我有一个NDK应用程序,可以从/sys/class/power\u supply/battery读取电池状态信息。这在大多数设备上都能正常工作。在某些设备上,该目录不可读。例如,在英伟达盾上: $ adb shell shell@shieldtablet:/ $ ls /sys/class/power_supply/battery/ /sys/class/power_supply/battery/: Permission denied 在这些设备上,是否有其他方法在NDK中获取电池信息 获取电

我有一个NDK应用程序,可以从
/sys/class/power\u supply/battery
读取电池状态信息。这在大多数设备上都能正常工作。在某些设备上,该目录不可读。例如,在英伟达盾上:

$ adb shell
shell@shieldtablet:/ $ ls /sys/class/power_supply/battery/
/sys/class/power_supply/battery/: Permission denied
在这些设备上,是否有其他方法在NDK中获取电池信息


获取电池信息的Java API照常工作,但这是针对NDK应用程序的,所以我想要一种只使用C++的方法。

我通过在Java中创建一个带有
BroadcastReceiver
的全局对象来解决这个问题,该对象监听
操作电池更改的
广播。它缓存值,我用JNI从C++查询它们。我很想知道一个更干净的解决方案。

perm denied on ls'ing a directory只意味着帐户无法列出目录的内容,但如果您知道指向目录的绝对路径/文件名,则可以读取其中的文件。打开“/sys/class/power\u supply/battery/type”从我的NDK应用程序失败,我在logcat中看到这个输出:
type=1400 audit(0.0:85):avc:denied{search}for name=“tegra12-i2c.1”dev=“sysfs”ino=366 scontext=u:r:untrusted_app:s0 tcontext=u:object\r:sysfs\u nvi2c:s0 tclass=dir
。“未经测试的应用程序”这一点很有趣。我想知道是否有可能让我的应用程序可信。