【问题标题】:Access to microphone with WebView in Android在 Android 中使用 WebView 访问麦克风
【发布时间】:2016-02-14 07:22:08
【问题描述】:

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

我正在使用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


【解决方案1】:

原来是权限问题。清单文件中需要包含以下两项。

【讨论】:

  • 在清单中添加哪些权限才能从 WebVIew 捕获音频,视频工作正常,但我无法捕获音频。
猜你喜欢
  • 2018-10-27
  • 1970-01-01
  • 2017-03-07
  • 2014-08-01
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 2013-02-07
相关资源
最近更新 更多