完成以上步骤即可。
拍照:
1.布局文件
package com.asus.android_27_camera;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private SurfaceView sv_main_surface;
private Camera camera;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sv_main_surface = (SurfaceView) findViewById(R.id.sv_main_surface);
//给sv_main_surface添加回调函数
sv_main_surface.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
//打开照相机
camera = Camera.open();
//设置参数
Camera.Parameters parameters=camera.getParameters();
//设置照片格式
parameters.setPictureFormat(PixelFormat.JPEG);
//设置照片的质量
parameters.set("jpeg-quality",85);
camera.setParameters(parameters);
try {
camera.setPreviewDisplay(sv_main_surface.getHolder());
} catch (IOException e) {
e.printStackTrace();
}
//开启预览效果
camera.startPreview();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (camera!=null){
camera.stopPreview();
camera.release();
camera=null;
}
}
});
}
public void photo(View view){
camera.takePicture(null,null, new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
//图片压缩
Bitmap bitmap=BitmapFactory.decodeByteArray(data,0,data.length);
//图片压缩路径
try {
FileOutputStream fos=new FileOutputStream("mnt/sdcard/G150820_"+System.currentTimeMillis()+".jpeg");
//图片压缩的格式,质量及路径
bitmap.compress(Bitmap.CompressFormat.JPEG,85,fos);
camera.stopPreview();
camera.startPreview();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
}
}
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
录像(录音):
1布局文件:
package com.asus.android_27_camera;
import android.media.MediaRecorder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.SurfaceView;
import android.view.View;
import java.io.IOException;
public class RecorderActivity extends AppCompatActivity {
private SurfaceView sv_recorder_surface;
private MediaRecorder recorder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recorder);
sv_recorder_surface = (SurfaceView) findViewById(R.id.sv_recorder_surface);
//实例化媒体录制器
recorder = new MediaRecorder();
}
public void start(View view) throws IOException {
//从照相机采集视频
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
//从麦克风采集录音
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//设置视频编码方式
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
//设置录音编码方式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//设置保存路径
recorder.setOutputFile("/mnt/sdcard/G150820_"+System.currentTimeMillis()+".mp4");
//画面展示出来
recorder.setPreviewDisplay(sv_recorder_surface.getHolder().getSurface());
//准备
recorder.prepare();
//开始录制
recorder.start();
}
public void stop(View view){
if (recorder!=null){
recorder.stop();
recorder.release();;
recorder=null;
}
}
}
3.配置权限: