2017-08-15 2 views
2

Ich habe meine Videodatei in meinem Speicher gespeichert und versucht, das Video von meiner App mit Intent zu spielen .. Auf anderen Spielern diese Datei spielt gut, aber wenn ich versuchte, diese Datei abzuspielen mit VLC gibt es mir folgenden Fehler;VLC: Cant Play Video von getExternalStorageDirectory()

Wiedergabefehler Vlc hat bei diesem Medium einen Fehler festgestellt. Bitte versuchen Sie , um die Medienbibliothek zu aktualisieren.

Und

Die Lage /storage/emulated/0/myFolder/file.mov nicht abgespielt werden kann.

Saving Methode

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

} 

Intent

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

Antwort

0

Versuchen Voranstellen "file: //" zu responseLink.

+0

Ja, es wird funktionieren, aber es könnte ein Problem mit Android 7.0 sein – Mysterious

+0

Dann müssen Sie einen [FileProvider] (https://developer.android.com/reference/android/support/v4/content/FileProvider .html). Es ist langweilig, aber es ist nicht schwer. – cwbowron