android webview input file,Android WebView 不支持 H5 input type="file" 解决方法
发布日期:2021-06-24 12:16:07 浏览次数:2 分类:技术文章

本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:android+bitmap+drawtext,Android之Canvas DrawText
下一篇:android studio 移除工程,Android Studio彻底删除项目 Android Studio彻底删除Module

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月09日 13时59分29秒