Android相机意图不应允许将图像保存到图库并将其存储在指定路径中

时间:2016-03-02 06:25:42

标签: android android-intent android-camera-intent

当我使用此代码时 - >

public class Response {


private String name;
private String city;
private String fullName;
private String address;
private Integer downloads;
private Integer rating;
private List<String> repos ;

}

我可以将图像保存到指定的路径,但它也保存到图库。我不想将图像保存到图库。请在这里帮忙。

提前感谢您宝贵的时间。

3 个答案:

答案 0 :(得分:0)

使用以下意图捕获图像 -

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());

// create a file to save the image
File MyDir = new File(Environment.getExternalStorageDirectory() + File.separator + "MyDir");
if (!MyDir.exists()){
    MyDir.mkdirs()
}

File fileUri = new File(MyDir.getAbsolutePath() + File.separator + "IMG_"+ timeStamp + ".jpg"); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name

// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

图库应用程序扫描文件夹中的媒体内容并在图库中填充它们。

如果您不想在图库中显示捕获的图像,请按照以下方法进行操作 -

  1. 创建.Nomedia文件

  2. 添加点前缀

答案 1 :(得分:0)

试试这个

private void captureCameraImage() {

        Intent chooserIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        chooserIntent.putExtra(MediaStore.EXTRA_OUTPUT, getFilename());

        startActivityForResult(chooserIntent, CAMERA_PHOTO);

    }

返回您可以指定要保存的文件名的方法

public String getFilename() {
    File file = new File(Environment.getExternalStorageDirectory().getPath(), "MyFolder/Images");
    if (!file.exists()) {
        file.mkdirs();
    }
    String uriSting = (file.getAbsolutePath() + "/" + System.currentTimeMillis() + ".jpg");
    return uriSting;

}

答案 2 :(得分:0)

我遇到了同样的问题并实施了几个与此one类似的解决方法。 我还尝试隐藏文件,将.前缀添加到filname,并将.nomedia文件(请参阅MediaStore.MEDIA_IGNORE_FILENAME)放在我存储图像的文件夹中,但在某些情况下,调用相机应用程序像往常一样

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
    Uri fileUri = FileProvider.getUriForFile(getContext(), getString(R.string.file_provider_authority), file);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
    startActivityForResult(intent, CAMERA_REQUEST_CODE);
} else {
    showToastMessage(getString(R.string.no_camera_activity), Toast.LENGTH_LONG);
}

取决于设备和相机应用程序,后者可能会将图片也存储在图库中(通常会保存带有时间戳作为文件名的文件),即使您提供与文件关联的Uri也是如此存储在您的应用程序私有分区中。

所以我发现做我需要的最可靠的方法是直接由你自己control the camera或在YourActivity内采用cwac-cam2提供的CommonsWare库这样(注意评论.updateMediaStore()行)

Uri fileUri = FileProvider.getUriForFile(getContext(), getString(R.string.file_provider_authority), file);
CameraActivity.IntentBuilder builder = new CameraActivity.IntentBuilder(this); // this refers to the activity instance
    Intent intent = builder
            .skipConfirm()
            .facing(Facing.BACK)
            .to(fileUri)
            //.updateMediaStore() // uncomment only if you want to update MediaStore
            .flashMode(FlashMode.AUTO)
            .build();
    startActivityForResult(intent, CAMERA_REQUEST_CODE);