android camera 废弃,Android相机android.hardware.Camera已弃用
API文档
根据Android开发人员指南CameraSupport,他们说:
我们建议将新的android.hardware.camera2 API用于新的应用程序。
在关于CameraSupport的信息页面(上面链接)中,声明:
android.hardware.camera2包为连接到Android设备的各个相机设备提供接口。 它取代了已弃用的Camera类。
问题
当您检查该文档时,您会发现这两个Camera API的实现非常不同。
例如,在CameraSupport上获取相机方向
@Override
public int getOrientation(final int cameraId) {
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(cameraId, info);
return info.orientation;
}
Versus CameraSupport
@Override
public int getOrientation(final int cameraId) {
try {
CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
String[] cameraIds = manager.getCameraIdList();
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraIds[cameraId]);
return characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);
} catch (CameraAccessException e) {
// TODO handle error properly or pass it on
return 0;
}
}
这使得很难从一个切换到另一个并编写可以处理这两种实现的代码。
请注意,在这个单独的代码示例中,我已经不得不解决这样的事实:olde相机API使用CameraSupport基元用于相机ID,而新的适用于CameraNew对象。 对于这个例子,我通过在新API中使用int作为索引来快速修复它。 如果返回的相机并不总是以相同的顺序,则这将导致问题。 替代方法是使用String对象和旧int cameraIDs的String表示,这可能更安全。
一个人走了
现在要解决这个巨大的差异,您可以先实现一个接口,然后在代码中引用该接口。
在这里,我将列出该接口和2个实现的一些代码。 您可以将实现限制为实际使用相机API以限制工作量。
在下一节中,我将快速解释如何加载一个或另一个。
包装所有你需要的界面,为了限制这个例子我这里只有2个方法。
public interface CameraSupport {
CameraSupport open(int cameraId);
int getOrientation(int cameraId);
}
现在有一个老相机硬件api类:
@SuppressWarnings("deprecation")
public class CameraOld implements CameraSupport {
private Camera camera;
@Override
public CameraSupport open(final int cameraId) {
this.camera = Camera.open(cameraId);
return this;
}
@Override
public int getOrientation(final int cameraId) {
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(cameraId, info);
return info.orientation;
}
}
另一个用于新硬件api:
public class CameraNew implements CameraSupport {
private CameraDevice camera;
private CameraManager manager;
public CameraNew(final Context context) {
this.manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
}
@Override
public CameraSupport open(final int cameraId) {
try {
String[] cameraIds = manager.getCameraIdList();
manager.openCamera(cameraIds[cameraId], new CameraDevice.StateCallback() {
@Override
public void onOpened(CameraDevice camera) {
CameraNew.this.camera = camera;
}
@Override
public void onDisconnected(CameraDevice camera) {
CameraNew.this.camera = camera;
// TODO handle
}
@Override
public void onError(CameraDevice camera, int error) {
CameraNew.this.camera = camera;
// TODO handle
}
}, null);
} catch (Exception e) {
// TODO handle
}
return this;
}
@Override
public int getOrientation(final int cameraId) {
try {
String[] cameraIds = manager.getCameraIdList();
CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraIds[cameraId]);
return characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);
} catch (CameraAccessException e) {
// TODO handle
return 0;
}
}
}
加载适当的API
现在要加载您的CameraSupport或CameraNew类,您必须检查API级别,因为CameraNew仅可从api级别21获得。
如果已经设置了依赖项注入,则可以在提供CameraSupport实现时在模块中执行此操作。 例:
@Module public class CameraModule {
@Provides
CameraSupport provideCameraSupport(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return new CameraNew(context);
} else {
return new CameraOld();
}
}
}
如果您不使用DI,您可以只使用实用程序或使用工厂模式来创建正确的。 重要的是检查API级别。
android camera 废弃,Android相机android.hardware.Camera已弃用相关推荐
- android官网自定义相机,android native.js camera自定义相机
//js代码 //用代码渲染页面 let activity = plus.android.runtimeMainActivity(); let SurfaceView = plus.android.i ...
- 【Android适配问题集锦-相机类】Camera拍照时快门咔嚓声适配问题
现在Android手机一般都会带有照相功能,有很多朋友就发现手机照相时快门声音很响,想关又关不掉.....不过话说回来,静音拍照你想做啥? 来到主题上,因为网络上有很多关于"删除或修改快门声 ...
- android有程序占用相机,Android相机 - 有时当我拍照时,应用程序冻结,相机不可用...
我已经构建了一个应用程序,可以在您触摸预览时拍摄照片. 我可以拍很多照片,但有时当我触摸预览拍照时,没有快门声,整个应用程序冻结.此外,在此之后,如果我尝试启动内置相机应用程序,我会收到相机无法使用的 ...
- android 4.4原生相机,android—— cordova调用原生相机
额..相关的下载和集成就不说了,直接说说怎么调用原生相机吧. 首先,先添加相关的插件 cordova plugin add cordova-plugin-camera 然后,瞅瞅自己插件有木有加进去 ...
- Android getResources()。getDrawable()已弃用API 22
本文翻译自:Android getResources().getDrawable() deprecated API 22 With new android API 22 getResources(). ...
- camera (19)---Android 相机开发的基本流程
[Android 相机]Android 相机开发的基本流程 https://blog.csdn.net/bluewindtalker/article/details/54563910 相机开发现在有2 ...
- 相机寻找最适合分辨率android,ARCore:获取相机的分辨率(ARCore : Get Camera's resolution)...
ARCore:获取相机的分辨率(ARCore : Get Camera's resolution) 有没有办法获得相机的分辨率? (除非从头开始使用Android)我没有在session.setDis ...
- Android [Camera 源码] 相机 HAL3(Camera3) Google官方文档(二)
Google源码网地址链接:https://source.android.com/devices/camera 该Google Camera的文档为系列文章,文章列表: overview Camera ...
- android.hardware.Camera类及其标准接口介绍
android.hardware.Camera类及其标准接口介绍,API level 19 http://developer.android.com/reference/android/hardwar ...
最新文章
- ABAP中的Table Control编程
- Linux下Git和GitHub使用方法总结(Ubuntu16.04)
- 基于matplotlib的数据可视化 - 热图imshow
- 一个同事做的基于yaas平台的一个应用,可以用来学习SAP yaas
- HDU 3342 Legal or Not(拓扑排序)
- linux 批量替换
- 猴子选大王 (20 分)
- linux批量做信任,Linux 批量建立信任关系,实现ssh无password登陆的脚本
- Yearn V2 Vaults Swap发布,目前未经审核
- C# 如何 保存对config文件的修改
- 我的idea突然没有SVN了是怎么回事
- C#断点续传HTTP下载远程文件的方法
- 安全合规/法案--35--《APP收集使用个人信息自评估指南(征求意见稿)》原文及解读
- 2021年高压电工考试及高压电工考试资料
- 计算机自我鉴定高中生200字,精编高中生自我鉴定200字左右3篇 高中自我鉴定200字...
- matlab中codegen是什么,matlab中mcc编译器参数的含义
- 存储过程 生成拼音码与五笔码
- Jaeger知识点补充
- 腾讯外包抢5元红包被组长要回!格局决定高度。
- 《穷爸爸和富爸爸》读后感