使用HTML形式的Android 2.2.1的WebView上传文件 [英] Upload file in Android 2.2.1 webview using html form
问题描述
我开发一个Android使用的WebView 2.2.1应用程序。我似乎无法找到一个文件上传工作的解决方案。这是一个标准的文件上传表单。 web视图从来没有弹出的浏览器中。在Web浏览器本身,一切正常。在web视图,没有浏览弹出。如果你知道解决办法,请告诉我到底在什么地方增加的code在Android code部分。
下面的文件上传表单:
<表格名称=形式ID =文件上传ENCTYPE =多部分/表单数据行动=upload.asp方法=邮报>
<输入ID =斑点NAME =斑点级=simpleinput类型=文件/>
< /形式GT;
Android的$ C $低于C:
包com.pic21.app;
进口android.app.Activity;
进口android.os.Bundle;
进口android.view.KeyEvent;
进口android.webkit.WebView;
进口android.webkit.WebViewClient;
公共类pic21延伸活动{
/ **第一次创建活动时调用。 * /
的WebView mWebView;
私有类HelloWebViewClient扩展WebViewClient {
@覆盖
公共布尔shouldOverrideUrlLoading(web视图查看,字符串URL){
view.loadUrl(URL);
返回true;
}
}
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
mWebView =(web视图)findViewById(R.id.webview);
mWebView.getSettings()setJavaScriptEnabled(真)。
mWebView.loadUrl(http://www.m.blah.com);
mWebView.setWebViewClient(新HelloWebViewClient());
}
@覆盖
公共布尔的onkeydown(INT键code,KeyEvent的事件){
如果((钥匙code == KeyEvent.KEY code_BACK)及和放大器; mWebView.canGoBack()){
mWebView.goBack();
返回true;
}
返回super.onKeyDown(键code,事件);
}
}
(在一个问题编辑OP回答。见<一href="http://meta.stackoverflow.com/questions/251597/question-with-no-answers-but-issue-solved-in-the-comments">Question没有答案,但在评论问题解决)
在OP写道:
我环顾四周多一点,发现code,工程使用webChromeClient。以下工作code:
包com.pic21.app;
进口android.app.Activity;
进口android.content.Intent;
进口android.net.Uri;
进口android.os.Bundle;
进口android.view.KeyEvent;
进口android.webkit.ValueCallback;
进口android.webkit.WebChromeClient;
进口android.webkit.WebView;
进口android.webkit.WebViewClient;
@燮pressWarnings(未使用)
公共类PIC扩展活动{
私人的WebView mWebView;
私人ValueCallback&LT;乌里&GT; mUploadMessage;
私人最终静态INT FILECHOOSER_RESULT code = 1;
@覆盖
保护无效onActivityResult(INT申请code,INT结果code,
意向意图){
如果(要求code == FILECHOOSER_RESULT code)
{
如果(空== mUploadMessage)回报;
开放的结果=意图== NULL ||因此code!= RESULT_OK?空值
:intent.getData();
mUploadMessage.onReceiveValue(结果);
mUploadMessage = NULL;
}
}
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
mWebView =新的WebView(本);
mWebView.setWebViewClient(新WebViewClient());
mWebView.getSettings()setJavaScriptEnabled(真)。
mWebView.loadUrl(http://www.m.blah.com);
mWebView.setWebChromeClient(新WebChromeClient()
{
@燮pressWarnings(未使用)
公共无效openFileChooser(ValueCallback&LT;乌里&GT; uploadMsg){
mUploadMessage = uploadMsg;
意图I =新的意图(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType(图像/ *);
pic21Activity.this.startActivityForResult(Intent.createChooser(我,文件选择),FILECHOOSER_RESULT code);
}
});
的setContentView(mWebView);
}
@覆盖
公共布尔的onkeydown(INT键code,KeyEvent的事件){
如果((钥匙code == KeyEvent.KEY code_BACK)及和放大器; mWebView.canGoBack()){
mWebView.goBack();
返回true;
}
返回super.onKeyDown(键code,事件);
}
}
在code的AndroidManifest.xml文件应当包含Internet权限
&LT; XML版本=1.0编码=UTF-8&GT?;
&LT;舱单的xmlns:机器人=http://schemas.android.com/apk/res/android
包=com.pic21.app
安卓版code =1
机器人:VERSIONNAME =1.0&GT;
&LT;使用-权限的Android:名称=android.permission.INTERNET对/&GT;
&LT;使用-SDK安卓的minSdkVersion =7/&GT;
&lt;应用
机器人:图标=@可绘制/ ic_launcher
机器人:标签=@字符串/ APP_NAME&GT;
&LT;活动
机器人:标签=@字符串/ APP_NAME
机器人:名称=。pic21Activity
机器人:主题=@安卓风格/ Theme.NoTitleBar
机器人:screenOrientation =画像
机器人:configChanges =定位| keyboardHidden |键盘&GT;
&LT;意向滤光器&gt;
&lt;作用机器人:名称=android.intent.action.MAIN/&GT;
&LT;类机器人:名称=android.intent.category.LAUNCHER/&GT;
&所述; /意图滤光器&gt;
&LT; /活性GT;
&LT; /用途&gt;
&LT; /舱单&GT;
I'm developing an Android 2.2.1 app using webview. I can not seem to find a working solution for a file upload. It's a standard file upload form. Webview never pops up the browser box. Under the web browser itself, everything works. In webview, no browsing popup. If you know of a solution, please tell me exactly where to place the added code in the android code section.
File upload form below:
<form name="form" id="fileupload" enctype="multipart/form-data" action="upload.asp" method="post">
<input id="blob" name="blob" class="simpleinput" type="file" />
</form>
Android code below:
package com.pic21.app;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class pic21 extends Activity {
/** Called when the activity is first created. */
WebView mWebView;
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("http://www.m.blah.com");
mWebView.setWebViewClient(new HelloWebViewClient());
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
(Answered by the OP in a question edit. See Question with no answers, but issue solved in the comments )
The OP wrote:
I looked around for a bit more and found code that works using the webChromeClient. Working code below:
package com.pic21.app;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
@SuppressWarnings("unused")
public class pic extends Activity {
private WebView mWebView;
private ValueCallback<Uri> mUploadMessage;
private final static int FILECHOOSER_RESULTCODE=1;
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if(requestCode==FILECHOOSER_RESULTCODE)
{
if (null == mUploadMessage) return;
Uri result = intent == null || resultCode != RESULT_OK ? null
: intent.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mWebView = new WebView(this);
mWebView.setWebViewClient(new WebViewClient());
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("http://www.m.blah.com");
mWebView.setWebChromeClient(new WebChromeClient()
{
@SuppressWarnings("unused")
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
pic21Activity.this.startActivityForResult(Intent.createChooser(i,"File Chooser"), FILECHOOSER_RESULTCODE);
}
});
setContentView(mWebView);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
The code for the AndroidManifest.xml file should contain the internet permission
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.pic21.app"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-sdk android:minSdkVersion="7" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".pic21Activity"
android:theme="@android:style/Theme.NoTitleBar"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|keyboard" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这篇关于使用HTML形式的Android 2.2.1的WebView上传文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!