2014-02-14 37 views
1

我有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(); 
    } 
+0

你爲什麼要將webview設置爲null onActivityForResult? – ksasq

+0

@ksasq試圖讓它再次運行。我設置爲null因爲在setWebView()中我再次附加它。但不起作用 – Shudy

+0

好的,我重新讀了你的代碼,我想我發現了這個問題。請參閱下面的答案。謝謝 – ksasq

回答

1

當您在onActivityResult中收到文件時,您需要將傳遞到openFileChooser的uploadMessage發送回WebKit。例如:

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

請注意,文件選擇器方法是@hidden而不是公共Android SDK的一部分。他們未來可能不會得到支持。事實上,他們沒有在Android 4.4中工作,並沒有解決這個問題的方法。

+0

它工作完美。我將用適合我的問題的解決方案編輯我的問題。 謝謝大家。 – Shudy

相關問題