Android 安卓网络视图-上传

Android 安卓网络视图-上传,android,webview,webchromeclient,Android,Webview,Webchromeclient,我已经看到了上面提到的解决方案,但我不知道如何使它与我的代码一起工作。 下面是代码(显示带有文件上载的简单页面)。我的应用程序应该与Android 2.3-4.1兼容 package com.myapp.test; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.Window; imp

我已经看到了上面提到的解决方案,但我不知道如何使它与我的代码一起工作。 下面是代码(显示带有文件上载的简单页面)。我的应用程序应该与Android 2.3-4.1兼容

package com.myapp.test;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.CookieSyncManager;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {
    @Override
    public void onBackPressed() {
    }   
    
    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;

        }
    }
    
    
    private WebView webView;
    

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);
        CookieSyncManager.createInstance(this);
        CookieSyncManager.getInstance().startSync();
        webView = (WebView) findViewById(R.id.webView1);
        webView.getSettings().setJavaScriptEnabled(true);
        //webView.getSettings().setUserAgentString("Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) version/4.0.4 Mobile/7B367 Safari/531.21.10");
         webView.setWebChromeClient(new WebChromeClient()
          {
                 //The undocumented magic method override
                 //Eclipse will swear at you if you try to put @Override here
                 public void openFileChooser(ValueCallback<Uri> uploadMsg) {
                 
                  mUploadMessage = uploadMsg;
                  Intent i = new Intent(Intent.ACTION_GET_CONTENT);
                  i.addCategory(Intent.CATEGORY_OPENABLE);
                  i.setType("image/*");
                  MainActivity.this.startActivityForResult(Intent.createChooser(i,"File Chooser"), FILECHOOSER_RESULTCODE);
           
                 }
          });
        
        webView.loadUrl("http://encodable.com/uploaddemo/");
        webView.setWebViewClient(new MyWebViewClient());
        }
    private class MyWebViewClient extends WebViewClient {
         @Override
         public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }

    }
    
    class MyWebChromeClient extends WebChromeClient {
        // The undocumented magic method override
        // Eclipse will swear at you if you try to put @Override here
        public void openFileChooser(ValueCallback<Uri> uploadMsg) {

            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType("image/*");
            MainActivity.this.startActivityForResult(
                    Intent.createChooser(i, "Image Browser"),
                    FILECHOOSER_RESULTCODE);
        }

}
    
}
package com.myapp.test;
导入android.app.Activity;
导入android.content.Intent;
导入android.net.Uri;
导入android.os.Bundle;
导入android.view.Window;
导入android.view.WindowManager;
导入android.webkit.CookieSyncManager;
导入android.webkit.ValueCallback;
导入android.webkit.WebChromeClient;
导入android.webkit.WebView;
导入android.webkit.WebViewClient;
公共类MainActivity扩展了活动{
@凌驾
public void onBackPressed(){
}   
private ValueCallback mUploadMessage;
private final static int FILECHOOSER_RESULTCODE=1;
@凌驾
ActivityResult上受保护的void(int请求代码、int结果代码、,
意图(意图){
if(requestCode==FILECHOOSER\u RESULTCODE){
if(null==mUploadMessage)
返回;
Uri result=intent==null | | resultCode!=结果_确定?null
:intent.getData();
mUploadMessage.onReceiveValue(结果);
mUploadMessage=null;
}
}
私有网络视图;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
//getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,WindowManager.LayoutParams.FLAG_全屏);
setContentView(R.layout.activity_main);
CookieSyncManager.createInstance(此);
CookieSyncManager.getInstance().startSync();
webView=(webView)findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
//webView.getSettings().setUserAgentString(“Mozilla/5.0(iPad;U;CPU OS 3_2,类似Mac OS X;en-us)AppleWebKit/531.21.10(KHTML,类似Gecko)版本/4.0.4 Mobile/7B367 Safari/531.21.10”);
setWebView.WebChromeClient(新WebChromeClient()
{
//未记录的magic方法重写
//如果您试图在此处放置@Override,Eclipse将对您发牢骚
public void openFileChooser(ValueCallback uploadMsg){
mUploadMessage=上传消息;
意向i=新意向(意向.行动\u获取\u内容);
i、 addCategory(意图。类别可打开);
i、 setType(“image/*”);
MainActivity.this.startActivityForResult(Intent.createChooser(i,“文件选择器”),FILECHOOSER\u RESULTCODE);
}
});
webView.loadUrl(“http://encodable.com/uploaddemo/");
setWebViewClient(新的MyWebViewClient());
}
私有类MyWebViewClient扩展了WebViewClient{
@凌驾
公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
返回false;
}
}
类MyWebChromeClient扩展了WebChromeClient{
//未记录的magic方法重写
//如果您试图在此处放置@Override,Eclipse将对您发牢骚
public void openFileChooser(ValueCallback uploadMsg){
mUploadMessage=上传消息;
意向i=新意向(意向.行动\u获取\u内容);
i、 addCategory(意图。类别可打开);
i、 setType(“image/*”);
main activity.this.startActivityForResult(
Intent.createChooser(i,“图像浏览器”),
文件选择器\u结果代码);
}
}
}
我无法打开文件选择器


有什么想法吗?我有点绝望,我做错了什么…

你链接到的页面上投票最多的答案使用了
WebChromeClient
(不是WebViewClient)的子类,它反过来实现了
openFileChooser()
。你试过这样做吗?是的,我试过,但我在代码中迷失了方向,从来没有成功过。使用
WebChromeClient
是我所知道的最简单的解决方案。如果遇到问题,可以再试一次并编辑此问题(使用新代码)?我已经编辑了代码。我想,我在里面做了一些废话……到目前为止,代码看起来不错。不过,正如目前所写,它可能在2.x上工作。请在您发布的链接上查看Michel Olivier的答案,然后查看stalepretzel的答案。他们的建议一起使用,应该可以帮助您使文件选择器在2.3到4.1版本中工作。