我正在构建一个允许用户保存位图或共享位图而不保存位图的应用。第二个功能不能正常工作。我知道该应用程序需要先将文件保存到设备上,然后才能在社交媒体应用程序上共享,因此我的想法是在文件成功共享后立即自动从设备中删除文件。我已经建立了一个尝试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);
}
答案 0 :(得分:1)
关于您陈述的问题,insertImage()
返回Uri
的字符串表示形式。该Uri
不是文件。对其调用getPath()
是没有意义的,并且您不能基于该路径删除任何内容。
更广泛地说,如果您打算立即删除内容:
MediaStore
如果要共享它,然后将其删除:
MediaStore
不使用MediaStore
与其他应用共享图像:
getCacheDir()
中的文件中(在Context
上调用,例如Activity
或Service
)FileProvider
使该文件可用于其他应用程序除此之外:
请勿在{{1}}中使用通配符MIME类型。 您是提供要发送的内容的人。 您知道实际的MIME类型。使用它。
请注意,ACTION_SEND
活动无需同时满足ACTION_SEND
和EXTRA_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