使用HTML形式的Andr​​oid 2.2.1的WebView上传文件 [英] Upload file in Android 2.2.1 webview using html form

查看:166
本文介绍了使用HTML形式的Andr​​oid 2.2.1的WebView上传文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发一个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的Andr​​oidManifest.xml文件应当包含Internet权限

 &LT; XML版本=1.0编码=UTF-8&GT?;
&LT;舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=com.pic21.app
    安卓版code =1
    机器人:VERSIONNAME =1.0&GT;

    &LT;使用-权限的Andr​​oid:名称=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形式的Andr​​oid 2.2.1的WebView上传文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆