2015-07-17 7 views
10

Ich habe eine Webansicht mit Dateiauswahl, die in Samsung Galaxy Tab 2(Android 4.1.1), Lenovo, Nexus Tablets funktioniert. Aber das Problem ist, dass es nicht in Samsung galaxy Tab 3 woking ist. Welches ist die Android 4.4 tablet. Ich habe meinen setWebChromeClient Code hier hinzugefügt. Kannst du bitte jemand mir helfen.Dateiauswahl funktioniert nicht 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. **/ 

     }); 

Ich habe nur ein Stück Code hinzugefügt. Bitte fragen Sie mich, wenn Details erforderlich sind.

+0

können Sie den Logcat-Fehler anzeigen? – Jibbo

+0

Im Fehlerprotokoll ist nichts enthalten. Sobald klicken Sie auf Datei-Auswahl-Taste dann keine Aktion auslösen .. – Amsheer

+0

Dann werfen Sie einen Blick auf die hier veröffentlichten Links: http://stackoverflow.com/questions/13448731/does-samsung-galaxy-siii-have-a-bug-in- its-camera – Jibbo

Antwort

4

Es scheint, dass es eine known bug in Android 4.4, die <input type="file"> nicht funktionieren in einem WebView machen.

Leider ist openFileChooser keine öffentliche API und es gibt keine öffentliche Unterstützung dafür. In Android Lollipop wurde die API onShowFileChooser für diesen Zweck eingeführt.

Ich schlage vor, das Problem mit der JavaScript native WebView interface umgehen und definieren Sie eine benutzerdefinierte OpenFileChooser API von der nativen Teil Ihrer App behandelt.

+0

Wenn ich versuche, Javascript native Webview-Schnittstelle zu verwenden, dann, wie Sie für diese Methode öffentlichen void openFileChooser (ValueCallback uploadMsg, String acceptType) {? – Amsheer

+0

Die Idee ist, das Standard-Dateiauswahl-Verhalten vollständig zu umgehen durch: 1: Mit einer Schaltfläche auf Webpart, die die injizierte Javascript-API "openFile" aufruft. 2: Behandeln Sie das openFile im nativen Teil, indem Sie eine Absicht zum Abrufen einer Datei starten. 3: Handle auf native parte das onActivityResult den Pfad der Datei auflöst wählen. 4: Senden Sie den Pfad zum Webpart über eine benutzerdefinierte JavaScript-API (z. B. webView.evaluateJavaScript ("selectedFile (" path ")", null); 5: Behandeln Sie im Web die Logik mit der ausgewählten Datei. Möglicherweise müssen Sie sie ändern einige WebView-Einstellungen wie WebSettings.setAllowUniversalAccessFromFileURLs – Pollizzio

+0

@Pollizzio können Sie den Beispielcode dafür bereitstellen .. –

Verwandte Themen