【问题标题】:Unable to request RECORD_AUDIO permission in Android无法在 Android 中请求 RECORD_AUDIO 权限
【发布时间】:2018-07-12 11:23:21
【问题描述】:

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

【问题讨论】:

    标签: android permissions audio-recording


    【解决方案1】:

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

    android.permission.RECORD_AUDIO
    

    在你的清单中你正在使用

    &lt;uses-permission android:name="android.Manifest.permission.RECORD_AUDIO"/&gt;

    哪个不正确,必须是

    &lt;uses-permission android:name="android.permission.RECORD_AUDIO"/&gt;

    【讨论】:

      【解决方案2】:

      将此添加到清单文件中

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

      【讨论】:

      • 也在清单中添加这个
      猜你喜欢
      • 2023-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多