Android 相机图像名称
Android Camera Image Name
我正在尝试构建一个捕获图像的简单应用程序。在 Android M 之前,我已经成功实施了该应用程序。我在 Android N 上遇到了 FileUriExposedException,但后来我可以借助建议此代码的 link 解决它
`
capture_image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if(camera_intent.resolveActivity(getPackageManager())!=null){
ContentValues values = new ContentValues(1);
values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpg");
fileUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);
camera_intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);
camera_intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(camera_intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}
else {
Toast.makeText(Visitor_Details.this,"ERROR",Toast.LENGTH_LONG).show();
}
}
});
`
这段代码将图片存储在图片文件夹中,图片名称为随机的 13 位整数,例如:- 1507922385727.jpg。我尝试通过 Log.d() 读取 fileUri,但日志返回的值和图像名称不相同。这个图像名称是如何生成的?如何存储此图像名称,以便我可以通过意图传递它以在下一个 Activity 中显示图像?最后,我如何在 Pictures 中创建一个子文件夹,我可以将这些图像定向到其中?
PS :- 以前,我使用 SimpleDateFormat 获取时间戳作为我的图像名称,我使用 File class.The getImageName() 创建文件夹只是 returns 时间戳值。这是我用于以前版本 Android 的代码。
`
btnCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File imageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"Camera Test");
String imageName = getImageName();
File imagePath = new File(imageDir,imageName);
Uri imageUri = Uri.fromFile(imagePath);
camIntent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
startActivityForResult(camIntent,1);
}
`
How is this image name being generated?
这取决于 MediaStore
。使用您的原始代码,但使用 FileProvider
提供对文件位置的访问并获取您的 Uri
。请参阅 this sample app 了解如何将 FileProvider
与 ACTION_IMAGE_CAPTURE
一起使用。
我正在尝试构建一个捕获图像的简单应用程序。在 Android M 之前,我已经成功实施了该应用程序。我在 Android N 上遇到了 FileUriExposedException,但后来我可以借助建议此代码的 link 解决它 `
capture_image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if(camera_intent.resolveActivity(getPackageManager())!=null){
ContentValues values = new ContentValues(1);
values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpg");
fileUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values);
camera_intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri);
camera_intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
startActivityForResult(camera_intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}
else {
Toast.makeText(Visitor_Details.this,"ERROR",Toast.LENGTH_LONG).show();
}
}
});
`
这段代码将图片存储在图片文件夹中,图片名称为随机的 13 位整数,例如:- 1507922385727.jpg。我尝试通过 Log.d() 读取 fileUri,但日志返回的值和图像名称不相同。这个图像名称是如何生成的?如何存储此图像名称,以便我可以通过意图传递它以在下一个 Activity 中显示图像?最后,我如何在 Pictures 中创建一个子文件夹,我可以将这些图像定向到其中? PS :- 以前,我使用 SimpleDateFormat 获取时间戳作为我的图像名称,我使用 File class.The getImageName() 创建文件夹只是 returns 时间戳值。这是我用于以前版本 Android 的代码。 `
btnCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File imageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"Camera Test");
String imageName = getImageName();
File imagePath = new File(imageDir,imageName);
Uri imageUri = Uri.fromFile(imagePath);
camIntent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
startActivityForResult(camIntent,1);
}
`
How is this image name being generated?
这取决于 MediaStore
。使用您的原始代码,但使用 FileProvider
提供对文件位置的访问并获取您的 Uri
。请参阅 this sample app 了解如何将 FileProvider
与 ACTION_IMAGE_CAPTURE
一起使用。