赞
踩
本文主要记录一些零碎的东西
比扣扣上传头像时,可以拍照,需要选取拍照的应用,今天做的事就是提供供选择的拍照应用
使用我们的相机拍照,返回拍照数据
话不多说,看看效果
原理主要是向系统注册 action
给出的只是一个简单的测试代码,实际项目里camera的管理不能像我写的这样
看看实现:
app/src/main/AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.cl.slack.opencamera">
-
- <uses-permission android:name="android.permission.CAMERA"/>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:roundIcon="@mipmap/ic_launcher_round"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
-
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
-
- <!-- IMAGE_CAPTURE 返回Bitmap or 图片文件 -->
- <intent-filter>
- <action android:name="android.media.action.IMAGE_CAPTURE" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
-
- </activity>
- </application>
-
- </manifest>
CameraView.java
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.hardware.Camera; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; import java.io.IOException; /** * Created by slack * on 17/5/12 下午6:06 * 主要的surfaceView,负责展示预览图片,camera的开关 */ public class CameraView extends SurfaceView implements SurfaceHolder.Callback{ private SurfaceHolder mHolder = null; private Camera mCamera; private final int mDegree = 90; public CameraView(Context context) { this(context,null); } public CameraView(Context context, AttributeSet attrs) { super(context, attrs); mHolder = this.getHolder(); mHolder.addCallback(this); } @Override public void surfaceCreated(SurfaceHolder holder) { mCamera = Camera.open(); try { //设置camera预览的角度,因为默认图片是倾斜90度的 mCamera.setDisplayOrientation(mDegree); //设置holder主要是用于surfaceView的图片的实时预览,以及获取图片等功能,可以理解为控制camera的操作.. mCamera.setPreviewDisplay(holder); } catch (IOException e) { mCamera.release(); mCamera = null; e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Camera.Parameters parameters = mCamera.getParameters(); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。