编程语言
首页 > 编程语言> > java – 在Android中使用WebView访问麦克风

java – 在Android中使用WebView访问麦克风

作者:互联网

我正在尝试编写一个程序,其中包含一个WebView,它显示了一个使用麦克风录制音频的网页(使用javascript getUserMedia进行录制).我已经实现了以下代码,我得到弹出窗口,询问用户是否允许,在我允许之后,调用grant函数(我想我可以访问麦克风),但是录制只是空的.如果我在浏览器上尝试相同的网站,那么它的工作原理.

我正在测试this website.任何帮助将不胜感激.

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {


                // permission was granted, yay! Do the
                // contacts-related task you need to do.
                myCallback.invoke(myOrigin, true, false);

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
                Log.d("WebView", "PERMISSION NOT GRANTED");
            }
            return;
        } case MY_PERMISSIONS_REQUEST_RECORD_AUDIO: {
            Log.d("WebView", "PERMISSION FOR AUDIO");
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {


                // permission was granted, yay! Do the
                // contacts-related task you need to do.
                myRequest.grant(myRequest.getResources());

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

在我的ChromeClient中,我有:

@Override
    public void onPermissionRequest(final PermissionRequest request) {
        myRequest = request;

        for(String permission : request.getResources()) {
            switch(permission) {
                case "android.webkit.resource.AUDIO_CAPTURE": {
                    askForPermission(request.getOrigin().toString(), Manifest.permission.RECORD_AUDIO, MY_PERMISSIONS_REQUEST_RECORD_AUDIO);
                    break;
                }
            }
        }
    }

public void askForPermission(String origin, String permission, int requestCode) {
        Log.d("WebView", "inside askForPermission for" + origin + "with" + permission);

        if (ContextCompat.checkSelfPermission(getApplicationContext(),
                permission)
                != PackageManager.PERMISSION_GRANTED) {

            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                   permission)) {

                // Show an expanation to the user *asynchronously* -- don't block
                // this thread waiting for the user's response! After the user
                // sees the explanation, try again to request the permission.

            } else {

                // No explanation needed, we can request the permission.

                ActivityCompat.requestPermissions(thisActivity,
                        new String[]{permission},
                        requestCode);
            }
        } else {
            myRequest.grant(myRequest.getResources());
        }
    }

解决方法:

结果证明这是权限问题.以下两个都需要包含在清单文件中.

标签:java,android,android-webview,microphone
来源: https://codeday.me/bug/20190706/1396640.html