我有MainActivity包含webview,裏面我加載了我在資產文件夾中的html文件。 這個HTML看起來像這樣:(是的那一刻非常簡單)WebView在activityForResult返回的結果按鈕不起作用
<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加載正常,但裏面的按鈕不再響應。
MainAcitivy:
@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();
}
你爲什麼要將webview設置爲null onActivityForResult? – ksasq
@ksasq試圖讓它再次運行。我設置爲null因爲在setWebView()中我再次附加它。但不起作用 – Shudy
好的,我重新讀了你的代碼,我想我發現了這個問題。請參閱下面的答案。謝謝 – ksasq