2016-04-15 17 views
12

Voglio riprodurre video locali in una webview crosswalk. Sto ottenendo il percorso video da un intento che apre la mia attività, in modo che possa essere memorizzato internamente o su scheda SD.Riproduzione video locale nella webview

Utilizzo di questo URL file:///storage/emulated/0/Download/movies/movie.mp4 ottengo Failed to load resource: net::ERR_ACCESS_DENIED.

Utilizzare la finestra di dialogo del file di input con URL.createObjectURL(file); funziona. Ma poiché conosco il percorso, non voglio selezionarlo di nuovo manualmente. L'impostazione del valore del file di input è vietata.

Impossibile creare un URL utilizzando il percorso, poiché richiede file o blob.

A causa di possibili file di grandi dimensioni, non è possibile copiarli temporaneamente su scheda SD.

Questo mi dà File non trovato errore:

@Override 
    public WebResourceResponse shouldInterceptLoadRequest(XWalkView view, 
                  String url) { 
     if(url.contains("file:///storage")){ 
      try { 
       return new WebResourceResponse("video/*", "UTF-8", new FileInputStream(url)); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
     } 
      return super.shouldInterceptLoadRequest(view, url); 
    } 

anche io ho definito <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

altre domande su StackOverflow chiedendo per l'accesso ai beni, così ho creato questa nuova domanda

+0

Quale versione di Android stai usando per il test? La domanda –

+0

corrisponde a [https://stackoverflow.com/questions/8885701/play-local-hard-drive-video-file-with-html5-video-tag](https://stackoverflow.com/questions/8885701/play-local-hard-drive-video-file-con-html5-video-tag) –

+2

prova questo per la tua soluzione [https://stackoverflow.com/questions/14194890/playing-local-video-in-webview- on-android] (https://stackoverflow.com/questions/14194890/playing-local-video-in-webview-on-android) –

risposta

2

all'accesso locale file su dispositivi Android che eseguono marshmellow o superiore, è necessario controllare l'autorizzazione in fase di esecuzione prima di tentare di accedere al file. Se non lo fai, si romperà

Ecco un tutorial in cui viene attuata, in particolare la lettura di file https://www.androidhive.info/2016/11/android-working-marshmallow-m-runtime-permissions/

seconda della sorgente del file, vi consiglio di non controllare prima di giocare, ma il controllo poco prima del punto di ingresso. Ad esempio, se si sta cercando di selezionare un supporto da galleria, o di un file dal file manager, appena prima di creare il selettore intento di file, si controlla per il permesso di scrittura, è quindi procedere come indicato di seguito

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     if (requestCode == EXTERNAL_STORAGE_PERMISSION_CONSTANT) { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       //The External Storage Write Permission is granted to you... Continue your left job... 
       proceedAfterPermission(); 
      } else { 
       //request again for permission or assume permission denied and alert the user 
      } 
     } 
    } 

Dovresti ancora studiare il collegamento, è piuttosto semplice da implementare. Spero che troverai questo utile

+0

Richiedente richiesto in Bounty: _' "Si prega di fornire una soluzione completa per riprodurre un video locale memorizzato in sdcard utilizzando webview che di solito apre l'url come MyDomain.com \ video.htm "' _. –

2

Il problema potrebbe essere nell'accedere al file video dalla memoria esterna anche assicurati di aver dato il permesso di lettura/scrittura. Qui puoi trovare la tua soluzione here e this

+0

Ciao, questo è a rischio di essere una ** risposta di bassa qualità **.Una frase non è sufficiente per _ "richiesto" Fornire una soluzione completa per riprodurre un video locale memorizzato in sdcard usando la webview che di solito apre url come MyDomain.com \ video.htm "' _. Il tuo primo link è stato menzionato nei commenti 2 giorni fa, anche il secondo link è del 2013 e c'è un avviso che non funziona in Android 4.4 e versioni successive (2014). Si prega di [** modificare **] (https://stackoverflow.com/posts/45469216/edit) con la soluzione spiegata e fornendo codice di esempio testato. –

Problemi correlati