1

I am new to this Android webview. The app that i am creating has camera and microphone access.

The permission for camera and microphone gets granted but when trying to open the camera, its not opening.

The website works properly in mobile as well in desktop browsers but in my app its not opening. Please help me with this problem. Is there anything that i am missing?

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

    if (requestCode == MY_PERMISSION_REQUEST_CAMERA || requestCode == MY_PERMISSIONS_REQUEST_RECORD_AUDIO) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(MainActivity.this, "permission granted", Toast.LENGTH_SHORT).show();

        } else {
            Toast.makeText(MainActivity.this, "permission not granted", Toast.LENGTH_SHORT).show();
        }
    }
}

@SuppressLint({"SetJavaScriptEnabled", "ClickableViewAccessibility"})
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mContext = this.getApplicationContext();

    if (!isTaskRoot()) {
        finish();
        return;
    }



    myWebView = findViewById(R.id.myWebView);
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.setWebViewClient(new WebViewClient());
    myWebView.setWebViewClient(new MyCustomWebViewClient());



    myWebView.setWebChromeClient(new WebChromeClient());


    myWebView.setWebChromeClient(new MyCustomWebChromeClient());
    myWebView.getSettings().setDomStorageEnabled(true);
    myWebView.loadUrl("https://www.skaplink.com");

    myWebView.getSettings().setUserAgentString(userAgent);

    /*String permission1 = Manifest.permission.CAMERA;
    String permission2 = Manifest.permission.RECORD_AUDIO;
    String permission3 = Manifest.permission.MODIFY_AUDIO_SETTINGS;
    int grant1 = ContextCompat.checkSelfPermission(this, permission1);
    int grant2 = ContextCompat.checkSelfPermission(this, permission2);
    ContextCompat.checkSelfPermission(this, permission3);

    if (grant1 != PackageManager.PERMISSION_GRANTED && grant2 != PackageManager.PERMISSION_GRANTED) {

        String[] permission_list = new String[2];
        permission_list[0] = permission1;
        permission_list[1] = permission2;
        ActivityCompat.requestPermissions(this, permission_list, 1);
        ActivityCompat.requestPermissions(this, permission_list, 2);
        Log.d("Granting Process", "Done");
    }*/
    permission();
}


void permission() {

    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(MainActivity.this, "You already granted the permission", Toast.LENGTH_SHORT).show();
    } else {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSION_REQUEST_CAMERA);
    }

    if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(MainActivity.this, "You already granted the permission", Toast.LENGTH_SHORT).show();
    } else {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, MY_PERMISSIONS_REQUEST_RECORD_AUDIO);
    }
}

These are showing in my logcat

Failed to notify a WebView W/VideoCapabilities: Unrecognized profile 2130706434 for video/avc W/VideoCapabilities: Unsupported mime video/divx W/VideoCapabilities: Unsupported mime video/divx4 W/VideoCapabilities: Unsupported mime video/mp4v-esdp W/VideoCapabilities: Unsupported mime video/mp4v-esdp I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es I/CameraManagerGlobal: Connecting to camera service W/cr_media: Requires MODIFY_AUDIO_SETTINGS and RECORD_AUDIO. No audio device will be available for recording W/cr_media: Requires MODIFY_AUDIO_SETTINGS and RECORD_AUDIO. No audio device will be available for recording

frido
  • 13,065
  • 5
  • 42
  • 56
Deep
  • 123
  • 1
  • 3
  • 16

3 Answers3

3

You can not use a microphone and camera directly with webView for that you need to add extra permissions MODIFY_AUDIO_SETTINGS and also RECORD_AUDIO as well then only you will be able to access the features.

Add these permissions in the manifest file using

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

then ask for permission using onPermissionRequest method in your webView client class in your case which is MyCustomWebChromeClient

PJain
  • 526
  • 2
  • 14
  • Thank you for your suggestion. i have not tried the onPermissionRequest method till now. But i have added the permission in manifest. Sorry i have not included that in my question. – Deep Jul 26 '19 at 12:03
1

seems you have took runtime permission from user, but not granted for WebChromeClient please add following code, will solve problem

 webView.setWebChromeClient(new WebChromeClient(){
        @Override
        public void onPermissionRequest(final PermissionRequest request) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    request.grant(request.getResources());
                }
            });

        }
Mohd Qasim
  • 896
  • 9
  • 20
0

I too faced the same problem with Twilio Video Call sdk in a mobile web application opened inside WebView. While I spent good 4-5 hours trying various things from WebChromeClient in WebView and its events. Nothing worked for now. Had to resort to use some other alternate i.e. Chrome Custom Tabs. It is not exact substitude for WebView but was fit to our requirement for the time being.

refer https://guides.codepath.com/android/Chrome-Custom-Tabs

Pratap Singh
  • 401
  • 1
  • 4
  • 14