2016-09-30 1 views
0

turbolinks-androidパッケージを使用してファイルをアップロードしようとしても何も起こりません。おそらく、これはあなた自身のファイルアップローダーハンドラを書く予定があるからでしょうか?アンドロイドで動作するTurbolinks 5にファイル/カメラのアップロード機能を追加するには?

どうすればいいですか?私は、ユーザーがアップロードボタンを押して写真を撮って、それをHTMLファイルフィールドに付けることができるようにしたい。

また、これはturbolinks-iosでどのように行われますか?

答えて

1

WebChromeClientをTurbolinks Webviewに添付することができます。与えられた例はAPI21 +のためであり、下位APIはwebviewでファイルアップロードボタンをクリックしたときに異なる機能を使用することに注意してください。

あなたのファイルの先頭にこれを追加します。

private ValueCallback<Uri[]> mUploadMessage; 
private final static int REQUESTCODE_FILEPICKER = 100; // or any other int 

そして、あなたのonCreate()関数にこれを追加します。最後に

TurbolinksSession.getDefault(this).getWebView().setWebChromeClient(new WebChromeClient() { 

     public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> uploadMsg, WebChromeClient.FileChooserParams fileChooserParams) { 

      if (mUploadMessage != null) { 
       mUploadMessage.onReceiveValue(null); 
      } 
      mUploadMessage = uploadMsg; 
      Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
      i.addCategory(Intent.CATEGORY_OPENABLE); 
      i.setType("application/pdf"); 
      startActivityForResult(Intent.createChooser(i, "Pick a file"), REQUESTCODE_FILEPICKER); 

      return true; 
     } 

    }); 

:処理するために、あなたのonActivityResult()関数にこれを追加アップロードファイル:

if (requestCode == REQUESTCODE_FILEPICKER) { 
     if (data == null) { 
      mUploadMessage.onReceiveValue(null); 
      mUploadMessage = null; 
      return; 
     } 
     String dataString = data.getDataString(); 
     if (dataString != null) { 
      Uri[] results = new Uri[]{Uri.parse(dataString)}; 
      mUploadMessage.onReceiveValue(results); 
      mUploadMessage = null; 
      return; 
     } 
     mUploadMessage.onReceiveValue(null); 
     return; 
    } 

希望すると、これはあなたを助けます!

+0

イメージをアップロードする機能を追加するには、i.setTypeを "image/*"に設定する必要があることに注意してください。私の場合、それはpdfファイルを選択するためのファイルピッカーです。 – RuudSchuurmans

関連する問題