【问题标题】:Take a picture with camera and delete afterwards用相机拍照然后删除
【发布时间】:2018-08-20 13:09:54
【问题描述】:

我在这里看到很多帖子说这个问题已经解决了,但是看日期,我认为我看到的最近的是 2015 年。我已经尝试了我发现但无法解决的问题它。

主要是,我尝试从 uri 中找到文件(以不同的方式),但它说它不存在。

我也发现了这个:

getContentResolver().delete(data.getData, null, null)

在我从相机拍摄照片后,在 onActivityResult(int requestCode, int resultCode, Intent data) 方法中调用。在这种情况下,我得到了 NPE,因为数据为空。

编辑

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_open_camera) {
        ContentValues values = new ContentValues();
        imageName = "Example" + System.currentTimeMillis();
        values.put(MediaStore.Images.Media.TITLE, imageName);
        values.put(MediaStore.Images.Media.DESCRPITION, "Camera_" + System.currentTimeMillis());
        imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);

        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        takePictureIntent.putExtra(MediaStore.EXTRA_MEDIA_TITLE, imageName);
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageuri);
        if (takePictureIntent.resolveActivity(this.getPackageManager()) != null) {
            startActivityForResult(takePictureIntent, 1);
        }
        return true;
    }
    return super.onOptionsItemSelected(item);
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1 && resultCode == RESULT.OK) {
        Bitmap image = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
        // I do some stuff with this image here and want to delete it afterwards
        File fDelete = new File(imageUri.getPath());
        getApplicationContext().deleteFile(fDelete.getName());
    }
}

【问题讨论】:

  • 请编辑您的问题并提供minimal reproducible example。这将包括您“从相机拍摄照片”的代码以及您的 onActivityResult() 方法的实现。
  • 类上下文中 deleteFile 的文档指出:“删除与此上下文的应用程序包关联的给定私有文件。”如果您添加到外部存储,我认为它不应该工作。试试默认的 file.delete()
  • @MarcosVasconcelos,我之前和现在都尝试过,但没有成功。
  • File fDelete = new File(imageUri.getPath()); 这不会给你一个文件系统路径。请告诉imageUri.getPath()的值。还要告诉imageUri.toString()的值。
  • imageUri 有一个模式和一个路径,并且可能不是 file://,您需要再次从内容解析器中删除它(我不记得所以我不会作为答案)

标签: android android-camera delete-file


【解决方案1】:

如果您想删除让相机应用拍摄的照片,请不要使用 mediastore 中的内容 uri。

只需建立文件系统路径并使用文件提供程序并将获得的 uri 放入 EXTRA_OUTPUT 中。

完成后,使用您的文件系统路径删除文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多