2016-08-30 2 views
0

J'ai un problème, je ne l'ai jamais eu de problème d'ouvrir des fichiers via ACTION_VIEW la prochaine façon:[Android] Intent.ACTION_VIEW - Non trouvé

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(); 
} 

Le problème que j'ai est en ce moment que même si la fichier existe lorsque je choisis l'application pour ouvrir le fichier, il se ferme immédiatement et me dit Not found. J'ai mis l'image que je charge dans une vue d'image et il n'y a aucun problème, ainsi le dossier est valide mais pour une raison quelconque il y a des conflits quand je l'ouvre par intention.

Je suis conscient qu'il peut avoir quelque chose à voir avec la façon dont je suis en train de créer le fichier, je le récupérer de Google conduire donc je suis en train d'écrire le fichier en utilisant la bibliothèque Apache Commons la prochaine façon:

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(); 
} 

Qu'est-ce que je fais mal? Je ne suis pas totalement sûr si le problème a à voir avec la méthode de copie s'exécutant de manière asynchrone ou quelque chose comme ça.

Merci d'avance.

Répondre

1

Je n'ai jamais eu l'ouverture des fichiers via problème ACTION_VIEW la prochaine façon

que le code ne fonctionnera jamais, comme des applications tierces ont pas le droit de travailler avec des fichiers sur getFilesDir() de votre application.

Qu'est-ce que je fais mal?

Vous tentez de diffuser un fichier inaccessible à des programmes tiers. Use FileProvider pour servir le fichier, en utilisant FileProvider.getUriForFile() pour obtenir le Uri à utiliser dans votre ACTION_VIEWIntent.

+0

C'est la première fois que j'ai décidé d'utiliser ce chemin pour créer un fichier, je vous dois ma vie. Je te dois une bière, merci. –