我正在尝试使用 HardwarePropertiesManager
( https://developer.android.com/reference/android/os/HardwarePropertiesManager.html ) 访问信息。我正在使用带有以下代码的 Android 7.0(API 级别 24):
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView helloTV = findViewById(R.id.helloTV); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { HardwarePropertiesManager hardwarePropertiesManager = getApplicationContext().getSystemService(HardwarePropertiesManager.class); CpuUsageInfo[] cpuUsages = hardwarePropertiesManager.getCpuUsages(); ///...
现在,当我的应用程序找到 hardwarePropertiesManager.getCpuUsages();
行时,它会抛出以下异常:
java.lang.RuntimeException: Unable to start activity ComponentInfo{gr.serafeim.sensorplayground/gr.serafeim.sensorplayground.MainActivity}: java.lang.SecurityException: The caller is not a device or profile owner or bound VrListenerService. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2659) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6123) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757) Caused by: java.lang.SecurityException: The caller is not a device or profile owner or bound VrListenerService. at android.os.Parcel.readException(Parcel.java:1683) at android.os.Parcel.readException(Parcel.java:1636) at android.os.IHardwarePropertiesManager$Stub$Proxy.getCpuUsages(IHardwarePropertiesManager.java:127) at android.os.HardwarePropertiesManager.getCpuUsages(HardwarePropertiesManager.java:155) at gr.serafeim.sensorplayground.MainActivity.onCreate(MainActivity.java:21) at android.app.Activity.performCreate(Activity.java:6672) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1140) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2612) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2724) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1473) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6123) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
谁能给我解释一下:
- 什么是“设备或配置文件所有者”——我的申请怎么可能是一个?
- 什么是“VrListenerService”
- 有什么方法可以让我实际使用
HardwarePropertiesManager
来获取有关我的 CPU 的信息,否则这是一个失败的原因?
getCpuUsages
的文档只是说它抛出一个 SecurityException
“如果设备所有者或当前 VR 服务之外的其他东西试图检索此服务提供的信息"-- 这并没有澄清任何事情。
最佳答案
经过一些研究,我发现了问题所在。仅允许在企业配置的 Android 设备中使用 HardwarePropertiesManager
API(参见此处 https://developer.android.com/work/overview.html 和此处 https://sdgsystems.com/blog/introduction-android-work)。因此,此 API 主要用于 Kiosk 模式(或自带设备 - BYOD)的设备,以便您轻松地远程监控此设备。 “设备所有者”或“配置文件所有者”是指 BYOD 或 COSU - 公司拥有的单一用途应用程序或用户配置文件。
因此很遗憾,这个 API 不能被普通设备使用。
关于android - HardwarePropertiesManager 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49854637/