检查SD卡上是否存在图像 - Android

时间:2014-02-03 14:50:22

标签: android file share

我正在尝试从我的应用内共享图像,图像位于设备的外部存储设备上。问题是如果用户手动将图像从外部存储中删除,用户仍然可以选择共享图像。如何检查他们是否先删除了它?这是我的分享方法:

@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");
        }
    }

它可以工作但总是共享,所以如果手动删除图像,它将尝试发送空白图像。

2 个答案:

答案 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");
    }
}