2013-01-05 78 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);