2013-01-05 25 views
1

我有一個簡單的應用程序,可以選擇上傳圖片(圖庫或相機), 我使用了webview並設法使其工作。Android webview,openfilechooser終止

我有,當我打開「openfilechoosr」對話框,回來我的應用程序沒有選擇任何文件(通過背面或只需點擊我的應用程序的屏幕),比我的應用程序沒有響應了(直到問題android重新啓動),當我重新啓動它時,它顯示爲空白頁。

一些更多的信息:

的錯誤,我試圖打開應用程序,我下了文件選擇不選擇任何文件後(應用程序將重新啓動機器人後再次合作)每次我得到:

java.lang.Throwable中:EventHub.removeMessages就建立了WebViewCore之前(INT什麼= 107)不支持的

我的代碼: [MainActivity]

webView = (WebView) findViewById(R.id.webview); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setBuiltInZoomControls(true); 
webView.getSettings().setSavePassword(false); 
webView.getSettings().setSaveFormData(false); 
webView.setWebViewClient(new MyWebViewClient()); 
webView.setWebChromeClient(new MyWebChromeViewClient()); 
webView.loadUrl(url); 


private class MyWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    } 

    private class MyWebChromeViewClient extends WebChromeClient { 
     //@Override 
     public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {  
      File imageStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyApp"); 
      // Create the storage directory if it does not exist 
      if (! imageStorageDir.exists()){ 
       imageStorageDir.mkdirs();     
      } 
      File file = new File(imageStorageDir + File.separator + "IMG_" + String.valueOf(System.currentTimeMillis()) + ".jpg"); 
      imageUri = Uri.fromFile(file); 

      final List<Intent> cameraIntents = new ArrayList<Intent>(); 
      final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
      final PackageManager packageManager = getPackageManager(); 
      final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0); 
      for(ResolveInfo res : listCam) { 
       final String packageName = res.activityInfo.packageName; 
       final Intent intent = new Intent(captureIntent); 
       intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); 
       intent.setPackage(packageName); 
       intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
       cameraIntents.add(intent); 
      } 


      uploadMessage = uploadMsg; 
      Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
      intent.addCategory(Intent.CATEGORY_OPENABLE); 
      intent.setType("image/*"); 
      Intent chooserIntent = Intent.createChooser(intent,"Image Chooser"); 
      chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{})); 
      activity.startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE); 
     } 

請指教。

謝謝喬。

回答

1

我發現這個問題,

我忘了添加到「onActivityResult」裏的結果是這樣等於「取消」,即0

0

也期待在similar post here

不要忘記在對話框中處理取消,並告訴WebChrome選擇完成。

0

上回調,返回NULL當發送resultCode == 0(後退鍵)

mUploadMessage.onReceiveValue(null);