【问题标题】:Android: PackageManager.getSystemAvailableFeatures() is not working as expected on Nexus9Android:PackageManager.getSystemAvailableFeatures() 在 Nexus9 上没有按预期工作
【发布时间】:2015-03-20 21:48:21
【问题描述】:

我正在尝试使用PackageManager.getSystemAvailableFeatures() 在我的 Nexus9 设备上获取所有可用的系统功能。

从 Android 5.0 Lollipop 开始,Google 引入了new camera APIs (camera2)。我认为 Nexus9 正在使用 Camera2 API。

当我在 Nexus9 设备上运行此 API 时,它没有列出 camera2 API 功能,例如:

android.hardware.camera.level.full

android.hardware.camera.capability.manual_post_processing

android.hardware.camera.capability.manual_sensor

android.hardware.camera.capability.raw

我正在使用以下代码来获取所有可用功能:

public final static boolean isFeatureAvailable(Context context, String feature) {
        final PackageManager packageManager = context.getPackageManager();
        final FeatureInfo[] featuresList = packageManager.getSystemAvailableFeatures();
        for (FeatureInfo f : featuresList) {
            if (f.name != null && f.name.equals(feature)) {
                 return true;
            }
        }

       return false;
    }

问题:

  1. Nexus9 是否使用并拥有 camera2 API 功能?

  2. 如果上述问题的答案是肯定的,那么为什么没有列出这些系统级功能?我做错了什么?

提前感谢您的 cmets!

【问题讨论】:

    标签: android camera android-camera android-5.0-lollipop


    【解决方案1】:

    Nexus9 是否使用并拥有 camera2 API 功能?

    是的。所有 Android Lollipop 设备和更新的设备都有 camera2 API。

    如果上述问题的答案是肯定的,那么为什么没有列出这些系统级功能?

    支持的 API 通常不包含在系统功能列表中。大多数系统功能都与因设备而异的事物相关,通常与硬件功能(例如传感器、蓝牙、NFC 等)或系统范围的软件支持(例如备份、设备管理、多用户等)有关.有一个所有受支持功能的列表here

    我做错了什么?

    根据docs,检查camera2 API是否存在的推荐方法是通过以下方式请求相机服务:

    CameraManager cameraManager = (CameraManager) getSystemService("camera");
    

    如果 camera2 API 不可用,这个方法基本上会返回 null,要么是因为 Android 版本太旧(sdkVersion

    【讨论】:

    • 迈克,谢谢你的回答。它有部分帮助。是的,您是,这些是设备功能而不是功能。以及如何获取有关这些能力的信息可以通过使用 CameraCharacteristics 类来实现。我已经发布了详细的答案。
    【解决方案2】:

    我终于能够得到我的问题的答案。

    Nexus9 是否使用并拥有 camera2 API 功能?

    Ans:是的,Nexus9 拥有并使用 Camera2 API。它具有有限支持的硬件级别并具有以下功能:BACKWARD_COMPATIBLE 和 MANUAL_SENSOR

    如果上述问题的答案是肯定的,那么为什么没有列出这些系统级功能?我做错了什么?

    Ans:因为使用上面的代码,我列出的是功能而不是功能。列出我在下面的代码中使用的功能:

    Activity activity = getActivity();
            CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
            try {
                for (String cameraId : manager.getCameraIdList()) {
                    CameraCharacteristics characteristics
                            = manager.getCameraCharacteristics(cameraId);
                    if (characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_FULL) {
                        Log.d("Camera2 SUPPORTED_HARDWARE_LEVEL: ", "FULL");
                    } else if (characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY) {
                        Log.d("Camera2 SUPPORTED_HARDWARE_LEVEL: ", "LEGACY");
                    } else if(characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) == CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED) {
                        Log.d("Camera2 SUPPORTED_HARDWARE_LEVEL: ", "LIMITED");
                    }
    
                    StringBuilder stringBuilder = new StringBuilder();
    
                    for (int i=0; i<characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES).length; i++) {
                        if(characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES)[i] ==CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE) {
                            stringBuilder.append("BACKWARD_COMPATIBLE" + "  ");
                        } else if (characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES)[i] ==CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING) {
                            stringBuilder.append("MANUAL_POST_PROCESSING" + "  ");
                        } else if(characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES)[i] ==CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR) {
                            stringBuilder.append("MANUAL_SENSOR" + "  ");
                        } else if (characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES)[i] ==CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_RAW) {
                            stringBuilder.append("RAW" + "  ");
                        }
                   }
                    Log.d("Camera2: ", stringBuilder.toString());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-29
      • 1970-01-01
      • 2014-03-27
      • 2020-10-13
      • 2016-11-07
      • 2019-11-30
      • 2019-12-20
      • 1970-01-01
      相关资源
      最近更新 更多