Android webview,openfilechooser终止

时间:2013-01-05 19:35:52

标签: android webview android-webview

我有一个简单的应用程序,可以选择上传图像(图库或相机), 我使用了webview并设法使其工作。

当我打开“openfilechoosr”对话框并回到我的应用而没有选择任何文件(通过后面或只是点击我的应用程序屏幕)时,我有一个问题,而不是我的应用程序不是不再响应(直到android重启),当我重新启动它时,它显示为空白页。

更多信息:

每次我在没有选择任何文件的情况下拿出文件选择器后尝试打开应用程序时出现的错误(应用程序在重新启动android后会再次运行):

  

java.lang.Throwable:EventHub.removeMessages(int what = 107)不是   在设置WebViewCore之前支持

我的代码: [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); 
        }

请建议。

谢谢乔。

3 个答案:

答案 0 :(得分:1)

我发现了问题,

我忘了添加到&#34; onActivityResult&#34;结果等于&#34;取消&#34;即0

答案 1 :(得分:0)

另请参阅similar post here

不要忘记在对话框中处理取消并告诉WebChrome选择已经完成。

答案 2 :(得分:0)

当resultCode == 0(后退按钮)

时,在回调上返回null
mUploadMessage.onReceiveValue(null);