问题描述
我有一个问题..:(
我有一个自定义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和文件选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!