当前位置: 首页 > 知识库问答 >
问题:

Android webview, openfilechooser终止

孟璞
2023-03-14

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

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

更多信息:

每次我在没有选择任何文件的情况下退出文件选择器后尝试打开应用程序时都会遇到错误(重新启动android后,应用程序将再次工作):

JAVAlang.Throwable:EventHub。在设置WebViewCore之前,不支持removeMessages(int what=107)

我的代码:[main活动]

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个答案

国胤
2023-03-14

返回null在回调,当结果代码==0(后退按钮)

mUploadMessage.onReceiveValue(null);
强志学
2023-03-14

也看看这里类似的帖子

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

柯昆杰
2023-03-14

我发现了问题,

我忘了在“onActivityResult”中添加一个结果等于“cancel”的情况,即0

 类似资料:
  • 移动应用程序新手。我正在尝试在我的android应用程序上使用webview。但我的代码中有一个问题。我使用了https://developer.android.com/但它现在不知怎么起作用了。你能查一下我的密码吗。。。。 Android说“无法解决符号webview”... 整个代码都在这里-

  • java版本“1.8.0_25”java(TM)SE运行时环境(版本1.8-0_2-b18)java热点(TM)64位服务器虚拟机(版本25.25-b02,混合模式) Appia1.3.4.1 Android SDK ro . build . version . SDK = 21.. 使用的设备:-Nexus 7,5.0.2 你好 我使用下面的代码从android.webkit.webview获取

  • 终止容器 可以使用 docker container stop 来终止一个运行中的容器。 此外,当 Docker 容器中指定的应用终结时,容器也自动终止。 例如对于上一章节中只启动了一个终端的容器,用户通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。 终止状态的容器可以用 docker container ls -a 命令看到。例如 docker container ls

  • 它的工作很好,但当我把它封闭在我的如果不喜欢 这给了我一个例外: org.apache.jasper.jasperexception:/jsp/custmngmt/reports/viewCustomerDepositReportCriteriaForOldReceipt.jsp(356,0)未终止 我已经测试了条件,它确实输入了if部分,但在通过form标记时会导致异常。我不明白。请帮帮我。

  • 2.4 频道终止 2.4.1 描述 通过调用该接口终止指定的域名的加速服务。 2.4.2 请求地址 地址:https://api.bokecs.com/channel/delete/{channelId} 2.4.3 请求方式 POST 2.4.4 请求参数 1) 请求入参 channelId 频道唯一标识 2)请求出参 { "code": "", "message": "" } code:接口

  • 1.1.1. 终端 1.1.1. 终端 若琪 IoT Skill 的对接的基本单元为终端,终端可以是一个真实的终端,也可以表示一个智能场景、应用。每一个终端需要说明它们具备的能力接口(Interface),一个能力接口可代表终端的一个可问询状态值,如一个终端具有温度接口(Temperature Interface),我们可以对若琪说:"若琪,现在的温度是多少?",来获取终端提供的温度接口的值;也可