1、重写WebChromeClient中onShowFileChooser方法:
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
mUploadCallbackAboveL = filePathCallback;
if (Build.VERSION.SDK_INT >= 23) {
int permission = ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
Log.e(TAG, "permission: " + permission);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PREMISSION_WRITE);
return false;
} else {//有权限
getImage();
return true;
}
} else {
getImage();
return true;
}
}
});
2、用的是GitHub上的图片选择框架https://github.com/LuckSiege/PictureSelectorLight
public void getImage() {
PictureSelector.create(this)
.openGallery(PictureMimeType.ofImage())
.selectionMode(PictureConfig.SINGLE)
.maxSelectNum(1)
.previewImage(false)
.compress(true)
.rotateEnabled(false)
.forResult(PictureConfig.CHOOSE_REQUEST);
}
3、选择完图片的处理
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e(TAG, "data: " + data);
if (requestCode == PREMISSION_WRITE) {
int permission = ActivityCompat.checkSelfPermission(getApplication(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
Log.e(TAG, "permission: " + permission);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PREMISSION_WRITE);
} else {//有权限
getImage();
}
} else if (requestCode == PictureConfig.CHOOSE_REQUEST) {
Log.e(TAG, "onActivityResult: resultCode:" + resultCode);
if (resultCode == RESULT_OK) {
List<LocalMedia> selectList = PictureSelector.obtainMultipleResult(data);
Log.e(TAG, "onActivityResult:selectList.size():" + selectList.size());
if (selectList.size() > 0) {
LocalMedia localMedia = selectList.get(0);
File file = new File(localMedia.getPath());
Uri uri;
if (Build.VERSION.SDK_INT >= 24) {
// 适配android7.0 ,不能直接访问原路径
// 需要对intent 授权
uri = FileProvider.getUriForFile(MainActivity.this, "com.cangyouchina.www.provider", file);
} else {
uri = Uri.fromFile(file);
}
mUploadCallbackAboveL.onReceiveValue(new Uri[]{uri});
} else {
mUploadCallbackAboveL.onReceiveValue(new Uri[]{});
}
} else {
mUploadCallbackAboveL.onReceiveValue(new Uri[]{});
}
}
}