WebViewClient和文件选择 [英] WebViewClient and fileChooser

查看:109
本文介绍了WebViewClient和文件选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题..:(

我有一个自定义web视图实现自己像一个延伸WebViewClient。
在应用程序的HTML身边,我有一个标记<输入类型='文件'ID ='媒体'的名字='媒体'接受=图像/ *捕捉=摄像头/> ,但我不能让它的工作!

我跟很多教程,但所有的人都用 WebChromeclient ;在我的情况下,由于应用的复杂性,我使用了 WebViewClient

有没有解决方案?
请..

在这里有我的课

 公共类MyWebView扩展WebViewClient {
私有静态上下文的背景下;
私有静态HttpClient的客户端;
私人静态共享preferences preFS;公共MyWebView(上下文的背景下,HttpClient的客户端,共享preferences preFS){
    超();
    MyWebView.context =背景;
    MyWebView.client =客户端;
    MyWebView preFS = preFS。
}
@覆盖
公共布尔shouldOverrideUrlLoading(的WebView视图,字符串URL){
    //使用cookie的一些操作
}


解决方案

我是有针对的WebView同样的问题。
 让我们假设UR HTML 看起来

 < HTML和GT;<身体GT;<形式的行动=upload_file.php方法=后
ENCTYPE =的multipart / form-data的>
<标签=文件>文件名:< /标签>
<输入类型=文件名称=文件ID =文件>
<输入类型=提交名称=提交值=提交>
< /表及GT;< /身体GT;
< / HTML>

下面是解决我的问题,整个

 包com.example.webviewtest;公共类MainActivity延伸活动{私人的WebView WV;私人ValueCallback<&乌里GT; mUploadMessage;
私人最终静态INT FILECHOOSER_RESULT code = 1;@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);    WV =新的WebView(本);
    wv.setWebViewClient(新WebViewClient());
    wv.setWebChromeClient(新WebChromeClient(){
        //未公开的魔术方法覆盖
        // Eclipse会在你发誓,如果你试图把这里@Override
        //对于Android和LT; 3.0
        公共无效openFileChooser(ValueCallback uploadMsg){            Log.i(对于Android和LT; 3.0,被称为);            mUploadMessage = uploadMsg;
            意图I =新意图(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);            i.setType(* / *);
            MainActivity.this.startActivityForResult(
                    Intent.createChooser(我,文件浏览器),
                    FILECHOOSER_RESULT code);
        }        //为Android 3.0以上版本
        公共无效openFileChooser(ValueCallback uploadMsg,
                字符串acceptType){            Log.i(对于Android 3.0以上版本,被称为);            mUploadMessage = uploadMsg;
            意图I =新意图(Intent.ACTION_GET_CONTENT);            i.addCategory(Intent.CATEGORY_OPENABLE);            i.setType(* / *);
            MainActivity.this.startActivityForResult(
                    Intent.createChooser(我,文件浏览器),
                    FILECHOOSER_RESULT code);
        }         公共无效openFileChooser(ValueCallback<&乌里GT; uploadMsg,字符串acceptType,字符串捕获){
             openFileChooser(uploadMsg);             Log.i(对于Android的软糖,被称为);            mUploadMessage = uploadMsg;
            意图I =新意图(Intent.ACTION_GET_CONTENT);            i.addCategory(Intent.CATEGORY_OPENABLE);            i.setType(* / *);
            MainActivity.this.startActivityForResult(
                    Intent.createChooser(我,文件浏览器),
                    FILECHOOSER_RESULT code);         }    });    的setContentView(WV);
    wv.loadUrl(http://blue.genetechz.com/qadir/);
}@覆盖
保护无效的onActivityResult(INT申请code,INT结果code,
        意向意向){    Log.i(的onActivityResult,称为);    如果(要求code == FILECHOOSER_RESULT code){
        如果(空== mUploadMessage){            Log.i(如果,回叫);
            返回;
        }其他{            乌里结果=意图== NULL ||结果code!= RESULT_OK?空值
                    :intent.getData();
            mUploadMessage.onReceiveValue(结果);
            mUploadMessage = NULL;
            Log.i(其他,内部称为);        }    }其他{        Log.i(其他,被称为);        // super.onActivityResult(要求code,结果code,意向);
        // IPlugin回调= this.activityResultCallback;
        //如果(回调!= NULL){
        // callback.onActivityResult(要求code,结果code,意向);
        //}
    }
}@覆盖
公共无效onBack pressed(){
    如果(wv.canGoBack()==真){
        wv.goBack();
    }其他{
        MainActivity.this.finish();
    }
}}

I have a problem.. :(

I have a custom webView implemented myself like an extends WebViewClient. In the html side of the application I have a tag <input type='file' id='media' name='media' accept="image/*" capture="camera" /> but I can not make it works!

I follow a lot of tutorial but all of them use WebChromeclient; in my case, because the complexity of the application, I use a WebViewClient.

Is there a solution? Please..

Here there is my class

public class MyWebView extends WebViewClient{
private static Context context;
private static HttpClient client;
private static SharedPreferences prefs;

public MyWebView(Context context, HttpClient client, SharedPreferences prefs){
    super();    
    MyWebView.context = context;
    MyWebView.client = client;
    MyWebView.prefs = prefs;
}


@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {                                     
    //some operation with cookie
}

解决方案

I was having the same issue for webview. Let suppose ur html looks like

<html>

<body>

<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file">
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

here is the whole which solved my problem

package com.example.webviewtest;

public class MainActivity extends Activity {

private WebView wv;

private ValueCallback<Uri> mUploadMessage;
private final static int FILECHOOSER_RESULTCODE = 1;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    wv = new WebView(this);
    wv.setWebViewClient(new WebViewClient());


    wv.setWebChromeClient(new WebChromeClient() {


        // The undocumented magic method override
        // Eclipse will swear at you if you try to put @Override here


        // For Android < 3.0
        public void openFileChooser(ValueCallback uploadMsg) {

            Log.i("For Android < 3.0", "called");

            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);


            i.addCategory(Intent.CATEGORY_OPENABLE);

            i.setType("*/*");
            MainActivity.this.startActivityForResult(
                    Intent.createChooser(i, "File Browser"),
                    FILECHOOSER_RESULTCODE);
        }

        // For Android 3.0+
        public void openFileChooser(ValueCallback uploadMsg,
                String acceptType) {

            Log.i("For Android 3.0+", "called");

            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);

            i.addCategory(Intent.CATEGORY_OPENABLE);

            i.setType("*/*");
            MainActivity.this.startActivityForResult(
                    Intent.createChooser(i, "File Browser"),
                    FILECHOOSER_RESULTCODE);
        }

         public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
             openFileChooser(uploadMsg);

             Log.i("For Android Jellybeans", "called");

            mUploadMessage = uploadMsg;
            Intent i = new Intent(Intent.ACTION_GET_CONTENT);

            i.addCategory(Intent.CATEGORY_OPENABLE);

            i.setType("*/*");
            MainActivity.this.startActivityForResult(
                    Intent.createChooser(i, "File Browser"),
                    FILECHOOSER_RESULTCODE);

         } 

    });

    setContentView(wv);
    wv.loadUrl("http://blue.genetechz.com/qadir/");
}

@Override
protected void onActivityResult(int requestCode, int resultCode,
        Intent intent) {

    Log.i("onActivityResult", "called");

    if (requestCode == FILECHOOSER_RESULTCODE) {
        if (null == mUploadMessage){

            Log.i("if", "return called");
            return;
        }else{

            Uri result = intent == null || resultCode != RESULT_OK ? null
                    : intent.getData();
            mUploadMessage.onReceiveValue(result);
            mUploadMessage = null;
            Log.i("else", "inner Called");

        }

    } else {

        Log.i("Else", "Called");

        // super.onActivityResult(requestCode, resultCode, intent);
        // IPlugin callback = this.activityResultCallback;
        // if (callback != null) {
        // callback.onActivityResult(requestCode, resultCode, intent);
        // }
    }
}

@Override
public void onBackPressed() {
    if (wv.canGoBack() == true) {
        wv.goBack();
    } else {
        MainActivity.this.finish();
    }
}

}

这篇关于WebViewClient和文件选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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