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

已授予Android webview摄像头和麦克风权限,但无法访问

连厉刚
2023-03-14
@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);
    }
}

这些显示在我的logcat里

无法通知WebView/VideoCapabilities:无法识别的配置文件2130706434用于视频/AVC W/VideoCapabilities:不支持的mime视频/Divx W/VideoCapilities:不支持的mime视频/Divx4 W/VideoCapilities:不支持的mime视频/MP4V-ESDP W/VideoCapilities:不支持的配置文件4用于视频/MP4V-ES I/CameramanagerGlobal:连接到摄像机服务W/CR_Media:需要MODIFY_AUDIO_SETTINGS和record_audio。没有音频设备可用于使用/cr_media录制:需要MODIFY_AUDIO_SETTINGS和record_audio。没有音频设备可用于录制

共有1个答案

葛飞扬
2023-03-14

您不能在webView中直接使用麦克风和摄像机,因为您需要添加额外的权限MODIFY_AUDIO_SETTINGS和RECORD_AUDIO,然后只有您才能访问这些功能

在清单文件中添加这些权限,使用

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

然后使用webView客户端类中的OnPermissionRequest方法请求权限(在您的示例中为MyCustomWebChromeclient

 类似资料:
  • 问题内容: 我有一个针对移动设备进行了优化的Web应用程序,可用于访问网络摄像头和麦克风资源。 我要将这个应用包装为A,因为我想提供本机应用体验。我知道,iOS不允许通过浏览器访问摄像机- 但有什么办法来获得权限的网络摄像头/麦克风与本机代码(沿着封装)和饲料这对Web应用程序-也许在某种程度上指向一个本地流源? 问题答案: 是的,看看cordova-plugin-iosrtc和cordova-p

  • 我已经创建了一个webview应用程序,在那里我扫描二维码。在移动和桌面浏览器上一切正常,但在应用程序中,我得到。 我在下面分享一些代码: 我也尝试了这里和这里建议的解决方案,但它对我不起作用。

  • 因此,如果我以角色的身份登录,我就可以很好地访问这个视图。 但是,让我们做一个小的改变,重写一个方法... 这会给我一个...我不明白为什么。 为什么?!! 希望能得到一些帮助来解决这个问题。

  • 我在*上运行命令< code >授予所有权限。*到由“root”标识的“root”@“%”; 并且它不断显示以下错误 11: 43:51向“root”标识的“root“@”%“授予所有权限。错误代码:1045。拒绝用户“root‘@”%的访问(使用密码:YES)0.00045秒 我还检查了Mysql上的User表,如下所示。 我不知道这是怎么回事?: 不重新安装MySQL怎么解决这个问题?(因为,

  • 我已经创建了自己的android。这样我就可以使用隐藏的API调用“DisplayManager.connectWifiDisplay()”。 当我运行应用程序并调用该方法时,在通过Wifi Direct连接到显示器后, 我得到以下例外: java.lang.SecurityException:连接到wifi显示器所需的权限:用户10105和当前进程都没有android.Permission.CO

  • 播放音符 播放声音 录制 文字转语音