我正在尝试使用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;
}
问题:
Nexus9使用&拥有camera2 API功能?
如果上述问题的答案是肯定的,那么为什么不列出这些系统级功能?我做错了什么?
提前感谢您的意见!
答案 0 :(得分:1)
Nexus9使用&有camera2 API功能吗?
是。所有Android Lollipop设备和更新的设备都有camera2 API。
如果上述问题的答案是肯定的,那么为什么不列出这些系统级功能呢?
支持的API通常不包含在系统功能列表中。大多数系统功能都与设备之间的差异有关,通常与硬件功能(例如传感器,蓝牙,NFC等)或系统范围的软件支持(例如备份,设备管理,多用户等)有关。 。这里列出了所有支持的功能here。
我做错了什么?
根据docs,检查camera2 API是否存在的推荐方法是通过以下方式请求摄像头服务:
CameraManager cameraManager = (CameraManager) getSystemService("camera");
基本上,如果camera2 API不可用,此方法会返回null
,因为Android的版本太旧(sdkVersion< 21)或者因为它们已从系统中删除(例如通过自定义ROM)。
答案 1 :(得分:0)
最后我能够得到我的问题的答案。
Nexus9使用&拥有camera2 API功能?
答案:是的,Nexus9正在使用Camera2 API。它具有LIMITED支持的硬件级别,并具有以下功能: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());