首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android: PackageManager.getSystemAvailableFeatures()不能像预期的那样在Nexus9上工作

Android: PackageManager.getSystemAvailableFeatures()不能像预期的那样在Nexus9上工作
EN

Stack Overflow用户
提问于 2015-01-22 07:09:42
回答 2查看 1.9K关注 0票数 0

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

从Android5.0Lolliop,谷歌推出了新的摄像头API (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

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

代码语言:javascript
复制
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. 如果以上问题的答案是肯定的,那么为什么不列出这些系统级别的功能呢?我做错什么了吗?

谢谢您的评论,提前!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-13 06:55:58

最后,我得到了我的问题的答案。

Nexus9正在使用&具有camera2 API特性?

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

如果对上述问题的回答是肯定的,那么为什么不列出这些系统级别的特性呢?我做错什么了吗?

答:因为使用上面的代码,我列出的是特性,而不是功能。要列出我在以下代码中使用的功能:

代码语言:javascript
复制
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());
票数 0
EN

Stack Overflow用户

发布于 2015-02-13 06:17:38

Nexus9是否使用和具有camera2 API特性?

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

如果以上问题的答案是肯定的,那么为什么不列出这些系统级别的功能呢?

支持的API通常不包括在系统功能列表中。大多数系统功能都与不同设备的特性相关,通常与硬件特性(例如传感器、蓝牙、NFC等)或全系统软件支持(例如备份、设备管理、多用户等)有关。这里列出了所有支持的功能,这里

我做错什么了吗?

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

代码语言:javascript
复制
CameraManager cameraManager = (CameraManager) getSystemService("camera");

基本上,如果null API不可用,则此方法将返回camera2,这要么是因为安卓的版本太旧(sdkVersion < 21),要么是因为它们已经从系统中删除(例如通过自定义的ROM)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28083077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档