gpt4 book ai didi

android - activityForResult 按钮返回时的 WebView 不起作用

转载 作者:行者123 更新时间:2023-11-30 03:06:12 25 4
gpt4 key购买 nike

我有包含 webview 的 MainActivity,我在其中加载了 Assets 文件夹中的 html 文件。这个 HTML 看起来像这样:(目前非常简单)

<html>
<body>
<form enctype="multipart/form-data" method="post">
<h2>capture=camera</h2>
<input type="file" accept="image/*;capture=camera"></input>
</form>
</body>
</html>

当点击 html 中的按钮时,会启动 CameraActivity,返回所拍摄图像的 Uri。

问题来了。因为在 MainActivity 中,在返回时,webview 加载正常,但是,里面的按钮不再响应。

主要 Activity :

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

setWebView();
startWebView();

Log.d("CAMERA", "UNO");
}


@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
setWebView();
startWebView();
}

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
setWebView();
startWebView();
}

private void setWebView() {
webview = (WebView) findViewById(R.id.webView1);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setLoadWithOverviewMode(true);
webview.getSettings().setAllowFileAccess(true);

webview.loadUrl(URL);
}
private void startWebView() {

webview.setWebViewClient(new WebViewClient() {

public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(URL);
return true;

}
});


webview.setWebChromeClient(new WebChromeClient() {


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

mUploadMessage = uploadMsg;

try {
Intent intent= new Intent(MainActivity.this, CameraActivity.class);
startActivityForResult(intent,CAM_ACT);

} catch (Exception e) {
Toast.makeText(getBaseContext(), "Exception:" + e,Toast.LENGTH_LONG).show();
}

}

// openFileChooser for Android < 3.0
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
openFileChooser(uploadMsg, "");
}

// openFileChooser for other Android versions
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {

openFileChooser(uploadMsg, acceptType);
}

}); // End setWebChromeClient



}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

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

super.onActivityResult(requestCode, resultCode, data);

if(requestCode == CAM_ACT) {
Log.d("Camera", "Activity result -->" + data.getExtras().getString("result"));
}
webview = null;
setWebView();
startWebView();
}

当我再次单击该按钮时,日志返回此消息:

02-14 11:01:40.048: V/WebViewInputDispatcher(16553): blockWebkitDraw
02-14 11:01:40.048: V/WebViewInputDispatcher(16553): blockWebkitDraw lockedfalse

我做错了什么?我该如何解决?

谢谢大家。


编辑解决方案

我的问题的解决方案是这样解决的(@ksasq提供)在“OnActivityResult”中,我不得不添加 mUploadMessage 行来解决它

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
// webview.loadUrl(URL);
if (requestCode == CAM_ACT) {
Log.d("Camera", "Activity result -->" + data.getExtras().getString("result"));
Uri result = data == null || resultCode != RESULT_OK ? null : data.getData();
this.mUploadMessage.onReceiveValue(result);
this.mUploadMessage = null;
}


setWebView();
startWebView();
}

最佳答案

当您在 onActivityResult 中收到文件时,您需要将传递给 openFileChooser 的 uploadMessage 发送回 WebKit。像这样的东西:

uploadMsg.receiveValue(data.getExtras().getString("result"))

请注意,文件选择器方法是@hidden 的,而不是公共(public) Android SDK 的一部分。将来可能不支持它们。事实上,它们在 Android 4.4 中不工作,并且没有解决方法。

关于android - activityForResult 按钮返回时的 WebView 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21776235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com