拍照后照片要保存到系统相册,可以通过给系统发个广播,扫描相应存放照片的文件路径,这时照片才会保存到系统相册。代码如下:
package com.example.administrator.cameratest;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
private Button camera ;
private ImageView image ;
private String path ;
private File cameraFile ;
private Uri imageUri ;
private final int TAKE_PHOTO_LOCAL = 1;
private static String filePath = null;
/** 外置存储卡根路径 */
public static final String SEPARATOR = System.getProperty("file.separator");
public static final String EXTERNAL_STORAGE_DIRECTORY_ROOT = Environment
.getExternalStorageDirectory().getAbsolutePath()+ SEPARATOR + "Test" + SEPARATOR+ "Image" + SEPARATOR ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
camera = (Button)findViewById(R.id.camera);
image = (ImageView)findViewById(R.id.image);
camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//
path = getPhotoFileName();
cameraFile = createNewFile(path);
imageUri = Uri.fromFile(cameraFile);
//打开相机的Intent
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
startActivityForResult(intent, TAKE_PHOTO_LOCAL);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
case TAKE_PHOTO_LOCAL :
if(resultCode == RESULT_OK)
{
// 通知系统将所拍照片路径写入系统数据库
Intent intent = new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(cameraFile));
sendBroadcast(intent);
Bitmap decodeFile = BitmapFactory.decodeFile(cameraFile.getAbsolutePath());
image.setImageBitmap(decodeFile);
}
break;
}
}
/**
* 创建文件夹
* @param path 路径
* @return
*/
public static File createNewFile(String path) {
File file = new File(path);
try {
/* if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}*/
if (!file.exists()) {
file.mkdirs();
}
if (file.exists()) {
file.delete();
}
file.createNewFile();
} catch (IOException e) {
//LogUtil.e(TAG, e.getMessage());
}
return file;
}
public static String getPhotoFileName()
{
String status = Environment.getExternalStorageState();
if (!status.equals(Environment.MEDIA_MOUNTED)) {
//showToast(R.string.camera_error_no_sdcard);
} else {
try {
filePath = EXTERNAL_STORAGE_DIRECTORY_ROOT
+ getWorkCirlePhotoFileName();
}catch (Exception e)
{
}
}
return filePath ;
}
/**
* 对照片命名,按时间
* @return
*/
public static String getWorkCirlePhotoFileName() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat(
"'IMG'_yyyy-MM-dd-HH-mm-ss", Locale.CHINA);
return dateFormat.format(date) + ".jpg";
}
}
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>