Android 摄像头系统调用
2016-06-25 20:56
381 查看
一个简单的demo演示摄像头的用法
此处就是通过将摄像头拍照的图片保存在文件中,文件的路径通过Intent和Uri传递
* 在SurfaceView 的onCreate 和 onDestory 回调方法中分别实现摄像头的打开和关闭,点击Btn时,调用takePicture将摄像头捕获的数据写入文件。*
直接启动摄像头
使用权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" />
在Activity中以接收回传值的方式处理拍照的图片
public class CameraActivity extends AppCompatActivity { private File mFileName; private Button mBtnStart; private ImageView mIvImg; private Button mBtnPreview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_camera); initView(); mBtnStart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { File path = new File(Environment.getExternalStorageDirectory(), "test"); if (!path.exists()) { path.mkdirs(); } mFileName = new File(path, System.currentTimeMillis() + ".jpg"); if (!mFileName.exists()) { try { mFileName.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } // 启动系统的Camera Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 将系统的的拍摄结果写入文件 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mFileName)); // 打开摄像头 startActivityForResult(intent, Activity.DEFAULT_KEYS_DIALER); } }); mBtnPreview.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(CameraActivity.this, PickActivity.class); startActivity(intent); } }); } private void initView() { mBtnStart = (Button) findViewById(R.id.id_btn_start); mBtnPreview = (Button) findViewById(R.id.id_btn_preview); mIvImg = (ImageView) findViewById(R.id.id_iv_img); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // 显示图片 if (requestCode == Activity.DEFAULT_KEYS_DIALER) { mIvImg.setImageURI(Uri.fromFile(mFileName)); } super.onActivityResult(requestCode, resultCode, data); } }
此处就是通过将摄像头拍照的图片保存在文件中,文件的路径通过Intent和Uri传递
使用SufaceView 实现拍照预览,手动实现拍照功能
public class PickActivity extends AppCompatActivity { private Button mBtnPick; private SurfaceView mSvView; private SurfaceHolder.Callback mCallback; private Camera mCamera; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pick); initView(); mCallback = new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { startCamera(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { stopCamera(); } }; mSvView.getHolder().addCallback(mCallback); mBtnPick.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mCamera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { File path = new File(Environment.getExternalStorageDirectory(), "test"); if (!path.exists()) { path.mkdirs(); } File fileName = new File(path, "test.jpg"); try { FileOutputStream fos = new FileOutputStream(fileName); fos.write(data); fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } }); } }); } private void stopCamera() { mCamera.stopPreview(); mCamera.release(); mCamera = null; } private void startCamera() { mCamera = Camera.open(); try { mCamera.setPreviewDisplay(mSvView.getHolder()); mCamera.setDisplayOrientation(90); mCamera.startPreview(); } catch (IOException e) { e.printStackTrace(); } } private void initView() { mBtnPick = (Button) findViewById(R.id.id_btn_pick); mSvView = (SurfaceView) findViewById(R.id.id_sv_camera); } }
* 在SurfaceView 的onCreate 和 onDestory 回调方法中分别实现摄像头的打开和关闭,点击Btn时,调用takePicture将摄像头捕获的数据写入文件。*
相关文章推荐
- Android基础-canvas paint
- Android与Java服务器端数据交互和Java对象转换成JSON对象
- java/android 设计模式学习笔记(11)---原型模式
- android之简易新闻客户端
- android开发最佳实践
- android 性能优化小技巧
- Androidstudio安装genymotion插件
- android 编译等各种坑……
- Android Annotations 4.0.0 配置Rest API
- 移动混合开发之android文件管理新建文件和删除文件
- Android Handler 详解
- android基础Handler小例子
- android-自定义View
- Ubuntu 下 使用 adb logcat 显示 Android 日志
- Android Gson解析Json(常规使用)
- Android数据存储(二)----- SharedPreferences存储
- android 自定义控件(五) 音量切换
- 创建ANDROID开发环境
- Android Studio 关联源码问题
- Android EditView 输入限制(软键盘限制)