Android WebView載入H5網頁通過WebChromeClient選擇裝置檔案
阿新 • • 發佈:2019-01-08
Android WebView載入H5網頁通過WebChromeClient選擇裝置檔案
先寫一個web.html作為測試網頁檔案放到res/assets目錄下:
<html>
<body>
<input type="file" value="選擇檔案">
</body>
</html>
package zhangphil.book; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; public class MainActivity extends AppCompatActivity { private WebView mWebView; private ValueCallback<Uri[]> mValueCallback; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = findViewById(R.id.webview); mWebView.loadUrl("file:///android_asset/web.html"); WebSettings mWebSettings = mWebView.getSettings(); //啟用JavaScript。 mWebSettings.setJavaScriptEnabled(true); mWebSettings.setUseWideViewPort(true); mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true); mWebView.setWebChromeClient(new WebChromeClient() { //title:接收網頁的標題。 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); System.out.println(title); } //載入網頁的進度。 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); System.out.println(newProgress); } @Override public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) { super.onShowFileChooser(webView, filePathCallback, fileChooserParams); //在H5網頁中開啟一個原生的檔案選擇器選擇檔案。 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("*/*"); startActivityForResult(Intent.createChooser(intent, "選擇檔案"), 2019); return true; } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 2019) { //選擇好的檔案路徑: data.getData() System.out.println(data.getData()); } } }