我正在尝试从我的应用内共享图像,图像位于设备的外部存储设备上。问题是如果用户手动将图像从外部存储中删除,用户仍然可以选择共享图像。如何检查他们是否先删除了它?这是我的分享方法:
@SuppressLint("NewApi")
private void shareImage(){
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
//create new files
File f = new File(mExternalImagePath);
if (f.exists()) {
//Do action
f.setReadable(true, false);
//create new file in the system
try {
f.createNewFile();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
//create new file object from the absolute path
File f1 = f.getAbsoluteFile();
f1.setReadable(true, false);
Uri path = Uri.fromFile(f1);
intent.putExtra(Intent.EXTRA_STREAM, path );
Intent mailer = Intent.createChooser(intent, null);
//mailer.setType("image/*");
startActivity(mailer);
}else{
Log.d("not exist", "not exist");
}
}
它可以工作但总是共享,所以如果手动删除图像,它将尝试发送空白图像。
答案 0 :(得分:3)
我不确定您的问题是否是因为您通过调用f.createNewFile()
或其他其他内容来创建新文件。
无论哪种方式,您都应该能够大大简化代码,以获取流并发送意图,如下所示:
private void shareImage(){
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
//create new files
File f = new File(mExternalImagePath);
if (f.exists()) {
Uri path = Uri.fromFile(f);
intent.putExtra(Intent.EXTRA_STREAM, path);
Intent mailer = Intent.createChooser(intent, null);
startActivity(mailer);
}else{
Log.d("not exist", "not exist");
}
}
希望能够解决您的问题,或者让问题更加明显,并为您提供帮助。
您还可以添加对文件长度的检查,以确保在通过.length()
上的f
发送您的意图之前,它以某种可读形式存在。
if (f.length() == 0){
Log.d("File Empty", "File does not have any content");
}else{
// create the intent and send
}
答案 1 :(得分:2)
正如@FD_所说,createNewFile()就是问题所在。请务必添加mailer.setType("image/*")
,以便其他应用可以处理您的共享请求。
@SuppressLint("NewApi")
private void shareImage(){
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
File f = new File(mExternalImagePath);
if (f.exists()) {
Uri path = Uri.fromFile(f);
intent.putExtra(Intent.EXTRA_STREAM, path );
Intent mailer = Intent.createChooser(intent, null);
mailer.setType("image/*");
startActivity(mailer);
}else{
Log.d("not exist", "not exist");
}
}