首页 > 解决方案 > 无法在 Android 中请求 RECORD_AUDIO 权限

问题描述

我正在开发一个具有自己的录像机功能的 Android 应用程序。为此,我需要向用户请求 RECORD_AUDIO 权限。但是当我请求权限时,它没有显示从用户那里获得权限的提示。

这是我的功能,用于检查应用程序是否需要请求权限,如果需要,它会自动执行。

private boolean isRecordAudioPermissionGranted()
   {
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
         if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) ==
            PackageManager.PERMISSION_GRANTED) {
            // put your code for Version>=Marshmallow
            return true;
         } else {
            if (shouldShowRequestPermissionRationale(Manifest.permission.RECORD_AUDIO)) {
               Toast.makeText(this,
                  "App required access to audio", Toast.LENGTH_SHORT).show();
            }
            requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO
            },AUDIO_RECORD_REQUEST_CODE);
            return false;
         }

      } else {
         // put your code for Version < Marshmallow
         return true;
      }
   }

在Activity的onCreate中,我是这样调用函数的。

if(!isRecordAudioPermissionGranted())
      {
         Toast.makeText(getApplicationContext(), "Need to request permission", Toast.LENGTH_SHORT).show();
      }
else{
   Toast.makeText(getApplicationContext(), "No need to request permission", Toast.LENGTH_SHORT).show();
}

该应用程序说它需要请求权限,但它只是没有提示请求权限对话框。我的代码有什么问题?

这是我在清单文件中添加和使用的权限。

 <uses-permission android:name="android.permission.GET_ACCOUNTS" />
   <uses-permission android:name="android.permission.READ_PROFILE" />
   <uses-permission android:name="android.permission.READ_CONTACTS" />
   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   <uses-permission android:name="android.permission.CAMERA" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.VIBRATE"/>


   <uses-permission android:name="android.permission.WAKE_LOCK"/>
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   <uses-permission android:name="android.Manifest.permission.RECORD_AUDIO"/>

   <uses-feature android:name="android.hardware.camera"/>
   <uses-feature android:name="android.hardware.camera.autofocus"/>
   <uses-feature android:name="android.hardware.camera.front"/>
   <uses-feature android:name="android.hardware.camera.front.autofocus"/>

   <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true"/>
   <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"/>
   <uses-feature android:name="android.software.vr.mode" android:required="true"/>
   <uses-feature android:name="android.hardware.vr.high_performance" android:required="true"/>

标签: androidpermissionsaudio-recording

解决方案


对于RECORD_AUDIO 权限,正确的权限字符串是

android.permission.RECORD_AUDIO

在您的清单中,您正在使用

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

这是不正确的,它必须是

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


推荐阅读