2017-08-15 2 views
2

J'ai enregistré mon fichier vidéo sur mon stockage et j'ai essayé de lire la vidéo de mon application en utilisant Intent .. Sur d'autres lecteurs, ce fichier fonctionne bien, mais lorsque j'ai essayé de lire ce fichier avec VLC cela me donne l'erreur suivante;VLC: Impossible de lire la vidéo à partir de getExternalStorageDirectory()

Erreur de lecture Vlc a rencontré une erreur avec ce média. Veuillez essayer en actualisant la bibliothèque multimédia.

Et

L'emplacement /storage/emulated/0/myFolder/file.mov ne peut pas être joué.

Méthode d'économie

private String SaveToDir(String DownloadUrl) { 

    try { 

     File dir = new File(Environment 
       .getExternalStorageDirectory(), 
       "myFolder"); 
     if (dir.exists() == false) { 
      dir.mkdirs(); 
     } 

     URL url = new URL(DownloadUrl); 
     String fileName = DownloadUrl.substring(DownloadUrl.lastIndexOf('/') + 1); 
     File file = new File(dir, fileName); 
     if (file.exists()) { 
      return file.getAbsolutePath(); 
     } else { 
      long startTime = System.currentTimeMillis(); 
      Log.d("DownloadManager", "download url:" + url); 
      Log.d("DownloadManager", "download file name:" + fileName); 

      URLConnection uconn = url.openConnection(); 
      uconn.setReadTimeout(TIMEOUT_CONNECTION); 
      uconn.setConnectTimeout(TIMEOUT_SOCKET); 

      InputStream is = uconn.getInputStream(); 
      BufferedInputStream bufferinstream = new BufferedInputStream(is); 

      BufferedOutputStream outStream = null; 
      outStream = new BufferedOutputStream(new FileOutputStream(file)); 
      byte[] buf = new byte[5000]; 
      int len; 
      while ((len = bufferinstream.read(buf)) > 0) { 
       outStream.write(buf, 0, len); 
      } 

      outStream.flush(); 
      outStream.close(); 
      makeFileAvailable(file); 
      Log.d("DownloadManager", "download ready in" + ((System.currentTimeMillis() - startTime)/1000) + "sec"); 
      int dotindex = fileName.lastIndexOf('.'); 
      if (dotindex >= 0) { 
       fileName = fileName.substring(0, dotindex); 

      } 
      return file.getAbsolutePath(); 
     } 
    } catch (IOException e) { 
     Log.d("DownloadManager", "Error:" + e); 
     e.printStackTrace(); 
     return ""; 
    } 

} 

intention

String responselink = SaveToDir(getImgUrl()); 
String type = FileUtils.getMimeType(responselink); 

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(responselink)); 
intent.setDataAndType(Uri.parse(responselink), type);        
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);         
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
generalPropListener.getSelfContext().startActivity(intent); 

Répondre

0

Essayer préfixer "file: //" à responseLink.

+0

Oui, cela fonctionnera, mais il pourrait y avoir un problème avec Android 7.0 – Mysterious

+0

Ensuite, vous devrez utiliser un [FileProvider] (https://developer.android.com/reference/android/support/v4/content/FileProvider .html). C'est fastidieux, mais ce n'est pas dur. – cwbowron