1.需要写SD权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
注意:
不需要<uses-permission android:name=“android.permission.CAMERA” />权限,如果添加了,会报错。
2.在布局文件中使用一个Button调用照相机,并显示在一个ImageView中
activity_quickly_photo.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="zs.camerademo.QuicklyPhoto">
<Button
android:id="@+id/btn"
android:text="拍照"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
3.在Activity:QuicklyPhoto.java中调用系统照相机
QuicklyPhoto.java
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import java.io.File;
import java.io.FileOutputStream;
import java.util.UUID;
public class QuicklyPhoto extends AppCompatActivity implements View.OnClickListener{
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quickly_photo);
findViewById(R.id.btn).setOnClickListener(this);
iv = findViewById(R.id.iv);
//获取写SD卡权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED){
System.out.println("OK");
}else {
ActivityCompat.requestPermissions(this,
new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}
}
@Override
public void onClick(View v) {
//用intent调用照相机拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//设置iv为拍下的照片,并保存到SD卡中
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
Bitmap cameraBitmap = (Bitmap) data.getExtras().get("data");
iv.setImageBitmap(cameraBitmap);
//保存到sd卡中
String name = "/sdcard/DCIM/"+ UUID.randomUUID()+".jpg";
File pictureFile = new File(name);
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
//将bitmap转换为png图片
cameraBitmap.compress(Bitmap.CompressFormat.PNG,100,fos);
fos.flush();
fos.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
效果如下:
点击拍照进入拍照界面
拍照完成
在SD卡中保存了这张照片