保存图片有两种方式:保存拍照的缩略图(图片分辨率低,文件小)、保存拍照的原始图片(图片分辨率高,文件大)。
1.保存拍照的缩略图
AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
java代码:
private static final int REQUEST_CODE_TAKE_PICTURE = 1000;
public void openCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, REQUEST_CODE_TAKE_PICTURE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (resultCode == RESULT_OK) {
switch (requestCode) {
case REQUEST_CODE_TAKE_PICTURE:
// 解析返回的图片成bitmap
Bitmap bmp = (Bitmap) intent.getExtras().get("data");
String f = System.currentTimeMillis() + ".jpg";
File file = new File("/sdcard/pic/" + f);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
} catch (Exception x) {
Log.e(TAG, "save Bitmap error=" + x);
} finally {
try {
fos.flush();
fos.close();
} catch (Exception x) {
Log.e(TAG, "save Bitmap error=" + x);
}
}
break;
default:
break;
}
}
super.onActivityResult(requestCode, resultCode, intent);
}
2.保存拍照的原始图片
AndroidManifest.xml中添加权限和provider:
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.test.fileProvider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="android:authorities">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths"
tools:replace="android:resource"/>
</provider>
java代码:
private static final int REQUEST_CODE_TAKE_PICTURE = 1000;
public void openCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String f = System.currentTimeMillis() + ".jpg";
File file = new File("/sdcard/pic/" + f);
Uri fileUri = null;
// Android7.0以及以后的版本需要使用FileProvider的方式
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
fileUri = FileProvider.getUriForFile(mContext, "com.test.fileProvider", file);
} else {
fileUri = Uri.fromFile(file);
}
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); //指定图片存放位置,指定后,在onActivityResult里得到的Data将为null
startActivityForResult(intent, REQUEST_CODE_TAKE_PICTURE);
}