无法在 Android 中请求 RECORD_AUDIO 权限

Unable to request RECORD_AUDIO permission in Android

我正在开发一个 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"/>

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

android.permission.RECORD_AUDIO

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

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

不正确,必须是

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

在清单文件中添加这个

在java //请求运行次权限

//Create placeholder for user's consent to record_audio permission.
//This will be used in handling callback
private final int MY_PERMISSIONS_RECORD_AUDIO = 1;

private void requestAudioPermissions() {
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.RECORD_AUDIO)
            != PackageManager.PERMISSION_GRANTED) {

        //When permission is not granted by user, show them message why this permission is needed.
        if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.RECORD_AUDIO)) {
            Toast.makeText(this, "Please grant permissions to record audio", Toast.LENGTH_LONG).show();

            //Give user option to still opt-in the permissions
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.RECORD_AUDIO},
                    MY_PERMISSIONS_RECORD_AUDIO);

        } else {
            // Show user dialog to grant permission to record audio
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.RECORD_AUDIO},
                    MY_PERMISSIONS_RECORD_AUDIO);
        }
    }
    //If permission is granted, then go ahead recording audio
    else if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.RECORD_AUDIO)
            == PackageManager.PERMISSION_GRANTED) {

        //Go ahead with recording audio now
        recordAudio();
    }
}

//Handling callback
@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_RECORD_AUDIO: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission was granted, yay!
                recordAudio();
            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
                Toast.makeText(this, "Permissions Denied to record audio", Toast.LENGTH_LONG).show();
            }
            return;
        }
    }
}