HardwarePropertiesManager 不工作
HardwarePropertiesManager is not working
我正在尝试使用 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)
谁能给我解释一下:
- 什么是"device or profile owner" - 我的申请怎么可能是一个?
- 什么是"VrListenerService"
- 有什么方法可以让我真正使用
HardwarePropertiesManager
来获取关于我的 CPU 的信息,或者这是一个失败的原因?
getCpuUsages
的文档只是说它会抛出一个 SecurityException
"if something other than the device owner or the current VR service tries to retrieve information provided by this service" -- 这并没有说明任何事情。
经过一番研究,我发现了问题所在。使用 HardwarePropertiesManager
API 仅允许在企业配置的 Android 设备中使用(参见此处 https://developer.android.com/work/overview.html and here https://sdgsystems.com/blog/introduction-android-work)。因此,此 API 主要用于 Kiosk 模式(或自带设备 - BYOD)的设备,以便您轻松地远程监控此设备。 "device owner" 或 "profile owner" 指的是 BYOD 或 COSU - 公司拥有的单一用途应用程序或用户配置文件。
因此很遗憾,这个 API 不能被普通设备使用。
我正在尝试使用 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)
谁能给我解释一下:
- 什么是"device or profile owner" - 我的申请怎么可能是一个?
- 什么是"VrListenerService"
- 有什么方法可以让我真正使用
HardwarePropertiesManager
来获取关于我的 CPU 的信息,或者这是一个失败的原因?
getCpuUsages
的文档只是说它会抛出一个 SecurityException
"if something other than the device owner or the current VR service tries to retrieve information provided by this service" -- 这并没有说明任何事情。
经过一番研究,我发现了问题所在。使用 HardwarePropertiesManager
API 仅允许在企业配置的 Android 设备中使用(参见此处 https://developer.android.com/work/overview.html and here https://sdgsystems.com/blog/introduction-android-work)。因此,此 API 主要用于 Kiosk 模式(或自带设备 - BYOD)的设备,以便您轻松地远程监控此设备。 "device owner" 或 "profile owner" 指的是 BYOD 或 COSU - 公司拥有的单一用途应用程序或用户配置文件。
因此很遗憾,这个 API 不能被普通设备使用。