2015-07-17 7 views
10

Ho una visualizzazione Web con file chooser che funziona in Samsung Galaxy Tab 2(Android 4.1.1), Lenovo, Nexus Tablets. Ma il problema è che non sta funzionando in Samsung galaxy Tab 3. Qual è il Android 4.4 tablet. Ho aggiunto il mio codice setWebChromeClient qui. Puoi per favore qualcuno aiutarmi.File Chooser non funziona in Samsung Tab 3 Android 4.4

// implement WebChromeClient inner class 
     // we will define openFileChooser for select file from camera 
     webView.setWebChromeClient(new WebChromeClient() { 

      // openFileChooser for Android 3.0+ 
      public void openFileChooser(ValueCallback<Uri> uploadMsg, 
        String acceptType) { 
       /** updated, out of the IF **/ 
       mUploadMessage = uploadMsg; 
       /** updated, out of the IF **/ 
       Log.e("Reac", "**Here"); 
       try { 
        File imageStorageDir = new File(base_directory, 
          "profile_pictures"); 
        if (!imageStorageDir.exists()) { 
         imageStorageDir.mkdirs(); 
        } 
        src_file = new File(imageStorageDir + File.separator 
          + "IMG_" + child_id + ".jpg"); 
        mCapturedImageURI = Uri.fromFile(src_file); // save to the 
                   // private 
                   // variable 

        final Intent captureIntent = new Intent(
          android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
        captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, 
          mCapturedImageURI); 

        startActivityForResult(captureIntent, 
          FILECHOOSER_RESULTCODE); 
       } catch (Exception e) { 
        Toast.makeText(getBaseContext(), "Camera Exception:" + e, 
          Toast.LENGTH_LONG).show(); 
       } 
      } 



      // openFileChooser for Android < 3.0 
      public void openFileChooser(ValueCallback<Uri> uploadMsg) { 
       openFileChooser(uploadMsg, ""); 
      } 

      // openFileChooser for other Android versions 
      public void openFileChooser(ValueCallback<Uri> uploadMsg, 
        String acceptType, String capture) { 
       openFileChooser(uploadMsg, acceptType); 
      } 

      /** Added code to clarify chooser. **/ 

      // The webPage has 2 filechoosers and will send a console message 
      // informing what action to perform, taking a photo or updating the 
      // file 
      public boolean onConsoleMessage(ConsoleMessage cm) { 
       onConsoleMessage(cm.message(), cm.lineNumber(), cm.sourceId()); 
       return true; 
      } 

      public void onConsoleMessage(String message, int lineNumber, 
        String sourceID) { 
       // Log.d("androidruntime", "Per cÔøΩnsola: " + message); 
      } 
      /** Added code to clarify chooser. **/ 

     }); 

Ho aggiunto solo un pezzo di codice. Per favore chiedimi se qualche dettaglio richiesto.

+0

puoi mostrare l'errore logcat? – Jibbo

+0

Non c'è nulla nel registro errori. Dopo aver fatto clic sul pulsante di selezione del file, non attivare alcun trigger .. – Amsheer

+0

Dai un'occhiata ai link pubblicati qui: http://stackoverflow.com/questions/13448731/does-samsung-galaxy-siii-have-a-bug-in- its-camera – Jibbo

risposta

4

Sembra che ci sia un known bug in Android 4.4 che rende <input type="file"> non funziona all'interno di una WebView.

Sfortunatamente openFileChooser non è un'API pubblica e non esiste un supporto pubblico per questo. In Android Lollipop è stata introdotta l'API onShowFileChooser per questo scopo.

Il mio suggerimento è di risolvere il problema utilizzando lo JavaScript native WebView interface e definire un'API openFileChooser personalizzata gestita dalla parte nativa della vostra app.

+0

Se provo a utilizzare l'interfaccia webview nativa di javascript, allora come ottenere input per questo metodo public void openFileChooser (ValueCallback uploadMsg, String acceptType) {? – Amsheer

+0

L'idea è di eliminare completamente il comportamento del selettore file standard: 1: Avere un pulsante sulla web part che chiama l'API javascript "openFile". 2: Gestire openFile sulla parte nativa avviando un intento per prelevare un file. 3: Gestisci su parte nativa l'onActivityResult risolvendo il percorso del file scelto. 4: inviare il percorso alla web part tramite un'API JavaScript personalizzata (ad es. WebView.evaluateJavaScript ("selectedFile (" percorso ")", null); 5: gestire sulla parte Web la logica con il file selezionato. Potrebbe essere necessario modificare alcune impostazioni di WebView come WebSettings.setAllowUniversalAccessFromFileURLs – Pollizzio

+0

@Pollizzio è possibile fornire il codice di esempio per questo –