无法在Android中请求RECORD_AUDIO权限

时间:2018-07-12 11:23:22

标签: android permissions audio-recording

我正在开发具有自己的录像机功能的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"/>

2 个答案:

答案 0 :(得分:2)

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

android.permission.RECORD_AUDIO

您的清单中正在使用

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

其中不正确,必须为

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

答案 1 :(得分:1)

将此添加到清单文件中

在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;
        }
    }
}