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());
}
}
}