本章节主要讲述学习android摄像头使用中的实践以及注意点,主要分为系统Camera的调用方法、指定相片路径、原图和缩略图、注册应用为Camera应用这几部分知识。
如有错误或优化之处,欢迎留言指导。
核心代码:
// 隐式Intent调用Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivity(intent);为了调用Camera拍照后返回可以获取到图片,将启动方式换成startActivityForResult,并重写onActivityResult方法。
核心代码:
// 推荐将requestCode定义为静态常量PRivate static int REQ_1 = 1;Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, REQ_1);@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { /** * 判断系统Camera返回的结果,也可能是RESULT_CANCEL * 如果是自定义的Activity可通过如下返回 * Intent intent = new Intent(); * setResult(RESULT_CANCELED, intent); * finish(); */ if (resultCode == RESULT_OK) { // 判断resultCode,RESULT_OK代表拍照成功 if (requestCode == REQ_1) { // 判断requestCode,分别处理不同Intent请求 Bundle bundle = data.getExtras(); // 获取所有返回数据 Bitmap bitmap = (Bitmap) bundle.get("data"); // 获取数据并转为Bitmap ImageView.setImageBitmap(bitmap); } } }但是通过如上方法从data中获取后的图片为系统优化过后的缩略图,如要获取高清原图,可以通过修改图片存储路径后再读取,如下可见。
核心代码:
private String mFilePath;// 在onCreate中初始化mFilePath = Environment.getExternalStorageDirectory().getPath();mFilePath = mFilePath + "/" + System.currentTimeMillis() + ".jpg";Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);Uri photoUri = Uri.fromFile(new File(mFilePath)); // 导包时注意导入的是android.net.Uriintent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);startActivityForResult(intent, REQ_1);@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == REQ_1) { FileInputStream fis = null; try { fis = new FileInputStream(mFilePath); if (fis != null) { Bitmap bitmap = BitmapFactory.decodeStream(fis); ImageView.setImageBitmap(bitmap); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (fis != null) { try { fis.close(); // 注意释放内存,但有时也要注意释放后可能会导致Bitmap无法显示 } catch (IOException e) { e.printStackTrace(); } } } } } }所以,调用系统相机拍照以及获取照片我们以及学会了,接下来可能有的朋友会开发美颜相机之类的App,那这类应用的必备的一步就是要把自己的app注册为Camera应用,让用户调用时可以选择用系统相机还是我们开发的相机。
核心代码:
// 剔除不支持Camera的设备<uses-feature android:name="android.hardware.Camera" android:required="true"/>// 权限申明,6.0在代码中还需校验<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.RECORD_AUDIO" />// 隐式调用的action<activity android:name=".CameraActivity"> <intent-filter> <action android:name="android.media.action.IMAGE_CAPTURE"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter></activity>本章节就记录到这里,下两章计划学习研究Camera1和Camera2,根据版本制作自定义相机,最后写一个兼容版本的简单相机demo。
新闻热点
疑难解答