java将FileChooseParams中的mime类型转换为正确的格式,以用于Intent。集合类型
我正在尝试使用Android中的WebView上传文件
这是使用中的the code:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onShowFileChooser(WebView webView, final ValueCallback<Uri[]> filePathsCallback, final WebChromeClient.FileChooserParams fileChooserParams) {
Intent intent = fileChooserParams.createIntent();
LOG.d(LOG_TAG, "mime types: " + Arrays.toString(fileChooserParams.getAcceptTypes()));
// PRINTS [.jpg,.png,.tiff,.jpeg,.tif,.pdf] !!
try {
parentEngine.cordova.startActivityForResult(new CordovaPlugin() {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
// ...
}
}, intent, FILECHOOSER_RESULTCODE);
} catch (ActivityNotFoundException e) {
// ...
}
return true;
}
问题是,当我必须使用的外部库(ng-file-upload
)触发此方法的执行时,fileChooserParams中作为参数传递的mime类型为:[.jpg,.png,.tiff,.jpeg,.tif,.pdf]
。我在list of allowed mime types中看不到大多数
因此,我在LogCat中发现此错误:
No activity found to handle file chooser intent.: 安卓.content.ActivityNotFoundException: No Activity found to handle Intent { act=安卓.intent.action.GET_CONTENT cat=[安卓.intent.category.OPENABLE] typ=.jpg,.png,.tiff,.jpeg,.tif,.pdf }
如果我简单地添加intent.setType("image/* application/pdf");
,一切都会按预期工作
现在的问题是:在我想提交给cordova-安卓贡献者的Merge Request中,如何安全地将文件选择器参数转换为正确的格式
# 1 楼答案
我使用以下代码改进了解决方案:
有关更多详细信息,请参阅myPull Request
# 2 楼答案
我决定只在my PR中添加以下两行:
结果:
2019-04-01 00:18:00.501 32500-32500/my.app.bundle.id D/SystemWebChromeClient: : fileChooserParams.getAcceptTypes(): [.jpg,.png,.tiff,.jpeg,.tif,.pdf]
2019-04-01 00:18:00.503 2225-2921/system_process I/ActivityManager: START u0 {act=android.intent.action.GET_CONTENT cat=[android.intent.category.OPENABLE] typ=image/* cmp=com.android.documentsui/.picker.PickActivity (has extras)} from uid 10105
我希望它能被接受