本文共 3057 字,大约阅读时间需要 10 分钟。
最近因为赶项目进度,因此将本来要用原生控件实现的界面,自己做了h5并嵌入webview中。发现点击h5中 input type="file" 标签 不能打开android资源管理器。
通过网络搜索发现是因为 android webview 由于考虑安全原因屏蔽了 input type="file" 这个功能 。
经过不懈的努力,以及google 翻译的帮助 在 stackoverflow 中找到了解决的方法。
具体可以理解为 重写webview 的webchromeclient ,废话不多说直接贴代码:
private valuecallback muploadmessage;
public valuecallback uploadmessage;
public static final int request_select_file = 100;
private final static int filechooser_resultcode = 2;
webview.setwebchromeclient(new webchromeclient(){
// for 3.0+ devices (start)
// onactivityresult attached before constructor
protected void openfilechooser(valuecallback uploadmsg, string accepttype)
{
muploadmessage = uploadmsg;
intent i = new intent(intent.action_get_content);
i.addcategory(intent.category_openable);
i.settype("image/*");
startactivityforresult(intent.createchooser(i, "file browser"), filechooser_resultcode);
}
// for lollipop 5.0+ devices
@targetapi(build.version_codes.lollipop)
public boolean onshowfilechooser(webview mwebview, valuecallback filepathcallback, webchromeclient.filechooserparams filechooserparams)
{
if (uploadmessage != null) {
uploadmessage.onreceivevalue(null);
uploadmessage = null;
}
uploadmessage = filepathcallback;
intent intent = filechooserparams.createintent();
try
{
startactivityforresult(intent, request_select_file);
} catch (activitynotfoundexception e)
{
uploadmessage = null;
toast.maketext(getbasecontext(), "cannot open file chooser", toast.length_long).show();
return false;
}
return true;
}
//for android 4.1 only
protected void openfilechooser(valuecallback uploadmsg, string accepttype, string capture)
{
muploadmessage = uploadmsg;
intent intent = new intent(intent.action_get_content);
intent.addcategory(intent.category_openable);
intent.settype("image/*");
startactivityforresult(intent.createchooser(intent, "file browser"), filechooser_resultcode);
}
protected void openfilechooser(valuecallback uploadmsg)
{
muploadmessage = uploadmsg;
intent i = new intent(intent.action_get_content);
i.addcategory(intent.category_openable);
i.settype("image/*");
startactivityforresult(intent.createchooser(i, "file chooser"), filechooser_resultcode);
}
});
}
@override
public void onactivityresult(int requestcode, int resultcode, intent intent)
{
if(build.version.sdk_int >= build.version_codes.lollipop)
{
if (requestcode == request_select_file)
{
if (uploadmessage == null)
return;
uploadmessage.onreceivevalue(webchromeclient.filechooserparams.parseresult(resultcode, intent));
uploadmessage = null;
}
}
else if (requestcode == filechooser_resultcode)
{
if (null == muploadmessage)
return;
// use mainactivity.result_ok if you're implementing webview inside fragment
// use result_ok only if you're implementing webview inside an activity
uri result = intent == null || resultcode != mainactivity.result_ok ? null : intent.getdata();
muploadmessage.onreceivevalue(result);
muploadmessage = null;
}
else
toast.maketext(getbasecontext(), "failed to upload image", toast.length_long).show();
}
以上所述是小编给大家介绍的android webview 不支持 h5 input type="file" 解决方法,希望对大家有所帮助
转载地址:https://blog.csdn.net/weixin_32667433/article/details/117539220 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!