如何使用路径删除文件

时间:2019-04-05 09:07:17

标签: android file android-intent android-bitmap mediastore

我正在构建一个允许用户保存位图或共享位图而不保存位图的应用。第二个功能不能正常工作。我知道该应用程序需要先将文件保存到设备上,然后才能在社交媒体应用程序上共享,因此我的想法是在文件成功共享后立即自动从设备中删除文件。我已经建立了一个尝试2种不同方法的删除方法,但都没有起作用:

第一种方法:

public void deleteFile(String path){
        File file = new File(path);
        try {
            file.getCanonicalFile().delete();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

第二种方法:

public void deleteFile(String path){
    File file = new File(path);
    boolean deleted = file.delete();
}

我正在通过共享方法调用deleteFile(String)

public void shareMeme(Bitmap bitmap) {
    String path = MediaStore.Images.Media.insertImage(Objects.requireNonNull(getContext()).getContentResolver(), bitmap, "Meme", null);
    Uri uri = Uri.parse(path);

    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("image/*");
    share.putExtra(Intent.EXTRA_STREAM, uri);
    share.putExtra(Intent.EXTRA_TEXT, "This is my Meme");
    getContext().startActivity(Intent.createChooser(share, "Share Your Meme!"));

    deleteFile(path);
}

2 个答案:

答案 0 :(得分:1)

关于您陈述的问题,insertImage()返回Uri的字符串表示形式。该Uri不是文件。对其调用getPath()是没有意义的,并且您不能基于该路径删除任何内容。

更广泛地说,如果您打算立即删除内容:

  • 请勿将其放入MediaStore
  • 请勿共享它,因为您将在其他应用程序对其进行任何操作之前将其删除

如果要共享它,然后将其删除:

  • 请勿将其放入MediaStore
  • 第二天或几个小时之内将其删除,因为您没有很好的方法来了解其他应用何时使用了内容

不使用MediaStore与其他应用共享图像:

  • 将图像保存到getCacheDir()中的文件中(在Context上调用,例如ActivityService
  • 使用FileProvider使该文件可用于其他应用程序

除此之外:

  • 请勿在{{1​​}}中使用通配符MIME类型。 是提供要发送的内容的人。 知道实际的MIME类型。使用它。

  • 请注意,ACTION_SEND活动无需同时满足ACTION_SENDEXTRA_TEXT的要求。多数似乎是这样做的,但是这种行为超出了EXTRA_STREAM规范。

  • 请注意,ACTION_SEND在Android Q上已过时。

答案 1 :(得分:0)

首先,您需要检查您的 text = item.first + " " + item.getSecond() + " Za " + item.getResult() + "."; tts.speak(text, TextToSpeech.QUEUE_ADD, null); boolean speakingEnd = tts.isSpeaking(); if(speakingEnd){ Toast.makeText(getApplicationContext(), "Speaking...."+position, Toast.LENGTH_SHORT).show(); multiples1.setImage_show(true); mAdapter.notifyItemChanged(position); } else { Toast.makeText(getApplicationContext(), "Done...."+position, Toast.LENGTH_SHORT).show(); } 是否存在(也许您设置了错误的路径?)。然后删除file

file