No Soy Beto
No Soy Beto

Reputation: 189

[Android ]Intent.ACTION_VIEW - Not found

I am having an issue, I have never had problem opening files via ACTION_VIEW the next way:

File file = new File(getActivity().getFilesDir(), TEMP_FILE_NAME);
String dataType = "image/*";

if (file.exists()) {

    Intent fileIntent = new Intent(Intent.ACTION_VIEW);
    fileIntent.setDataAndType(Uri.fromFile(file), dataType);
    fileIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
    Intent intent = Intent.createChooser(fileIntent, "Open file");
    try {
        startActivity(intent);
    } catch (ActivityNotFoundException e) {
        e.printStackTrace();
        Log.e(TAG, "There is a problem when opening the file");
    }
} else {
    Toast.makeText(getContext(), "Invalido", Toast.LENGTH_LONG).show();
}

The problem I am having right now is that even though the file exists when I choose the app to open the file it immediately closes and tells me Not found. I have put the image I am loading in an image view and there is no problem, so the file is valid but for some reason it has conflicts when I am opening it via intent.

I am aware that it may have something to do with the way I am creating the file, I am retrieving it from Google drive so I am writing the file using the Apache Commons library the next way:

DriveContents contents = result.getDriveContents();
InputStream inputStream = contents.getInputStream();

File file = new File(getActivity().getFilesDir(), TEMP_FILE_NAME);
try {
    OutputStream outputStream = new FileOutputStream(file);
    IOUtils.copy(inputStream, outputStream);
    IOUtils.closeQuietly(inputStream);
    IOUtils.closeQuietly(outputStream);
} catch (IOException e) {
    e.printStackTrace();
}

What is it I am doing wrong? I am not totally sure if the problem has to do with the copy method executing asynchronously or something like that.

Thanks in advance.

Upvotes: 0

Views: 1630

Answers (1)

CommonsWare
CommonsWare

Reputation: 1006614

I have never had problem opening files via ACTION_VIEW the next way

That code will never work, as third-party apps have no rights to work with files on getFilesDir() of your app.

What is it I am doing wrong?

You are attempting to serve an inaccessible file to third-party programs. Use FileProvider to serve the file, using FileProvider.getUriForFile() to get the Uri to use in your ACTION_VIEW Intent.

Upvotes: 2

Related Questions