如何在Android中的WebView中打开相机?

时间:2018-03-08 17:55:41

标签: android html webview

我想在Webview中打开相机,但它无法打开。

当我尝试使用图库打开图像时它工作正常但是当尝试使用相机上传图像时它没有打开相机我添加了相机的所有权限。我遵循的步骤是:

String webViewUrl =" http://www.androidexample.com/media/webview/details.html";

    // Javascript inabled on webview  
    webView.getSettings().setJavaScriptEnabled(true);

    // Other webview options
    webView.getSettings().setLoadWithOverviewMode(true);

    //webView.getSettings().setUseWideViewPort(true);

    //Other webview settings
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    webView.setScrollbarFadingEnabled(false);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setPluginState(PluginState.ON);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setSupportZoom(true); 

    //Load url in webview
    webView.loadUrl(webViewUrl);

    // Define Webview manage classes
    startWebView(); 


webView.setWebChromeClient(new WebChromeClient() {


        // openFileChooser for Android 3.0+
        public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType){  

            // Update message
            mUploadMessage = uploadMsg;

            try{    

                // Create AndroidExampleFolder at sdcard

                File imageStorageDir = new File(
                                       Environment.getExternalStoragePublicDirectory(
                                       Environment.DIRECTORY_PICTURES)
                                       , "AndroidExampleFolder");

                if (!imageStorageDir.exists()) {
                    // Create AndroidExampleFolder at sdcard
                    imageStorageDir.mkdirs();
                }

                // Create camera captured image file path and name 
                File file = new File(
                                imageStorageDir + File.separator + "IMG_"
                                + String.valueOf(System.currentTimeMillis()) 
                                + ".jpg");

                mCapturedImageURI = Uri.fromFile(file); 

                // Camera capture image intent
                final Intent captureIntent = new Intent(
                                              android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

                captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);

                Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
                i.addCategory(Intent.CATEGORY_OPENABLE);
                i.setType("image/*");

                // Create file chooser intent
                Intent chooserIntent = Intent.createChooser(i, "Image Chooser");

                // Set camera intent to file chooser 
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS
                                       , new Parcelable[] { captureIntent });

                // On select image call onActivityResult method of activity
                startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE);

              }
             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);
        }



        // The webPage has 2 filechoosers and will send a 
        // console message informing what action to perform, 
        // taking a photo or updating the file

        public boolean onConsoleMessage(ConsoleMessage cm) {  

            onConsoleMessage(cm.message(), cm.lineNumber(), cm.sourceId());
            return true;
        }

        public void onConsoleMessage(String message, int lineNumber, String sourceID) {
            //Log.d("androidruntime", "Show console messages, Used for debugging: " + message);

        }
    });   // End setWebChromeClient

}



// Return here when file selected from camera or from SDcard

@Override 
protected void onActivityResult(int requestCode, int resultCode,  
                                   Intent intent) { 

 if(requestCode==FILECHOOSER_RESULTCODE)  
 {  

        if (null == this.mUploadMessage) {
            return;

        }

       Uri result=null;

       try{
            if (resultCode != RESULT_OK) {

                result = null;

            } else {

                // retrieve from the private variable if the intent is null
                result = intent == null ? mCapturedImageURI : intent.getData(); 
            } 
        }
        catch(Exception e)
        {
            Toast.makeText(getApplicationContext(), "activity :"+e,
             Toast.LENGTH_LONG).show();
        }

        mUploadMessage.onReceiveValue(result);
        mUploadMessage = null;

 }

}

1 个答案:

答案 0 :(得分:0)

您是否在AppManifest中添加了这样的权限?

<uses-feature android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

你没有提到它,但你需要添加它。