Android How to judge whether a mobile phone has recording authority

  • 2021-09-12 02:17:02
  • OfStack

Action

Tool class for judging whether mobile phone has recording authority, compatible with android system above 6.0 and below

Test environment

This article was written after rewriting, modification and rewriting test after being questioned by netizens in the comments. My debugging environment is Xiaomi note3 and Android7.1 systems.

Remember to configure the corresponding permissions in the manifest file.

Train of thought

Check whether you have permission

-- > Have permission-perform related actions

-- > No permission-judge the system version

--Greater than or equal to 6.0--Dynamic Apply Permission

-- > Callback processing of application results
--Allow
--Refusal

Code

Tool class CheckAudioPermission. java


package com.example.a002034.testaudioperrmission;
 
import android.content.Context;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
 
/**
 * Function: Judge recording authority , Compatible android6.0 The following and above systems 
 *
 * @author xuzhuyun
 * @date 2018/5/10
 */
 
public class CheckAudioPermission {
  /**
   *  Audio acquisition source 
   */
  public static int audioSource = MediaRecorder.AudioSource.MIC;
  /**
   *  Set the audio sampling rate, 44100 Is the current standard, but some devices still support it 22050 , 16000 , 11025
   */
  public static int sampleRateInHz = 44100;
 
  /**
   *  Set the recording channel of audio CHANNEL_IN_STEREO Is a two-channel, CHANNEL_CONFIGURATION_MONO For mono 
   */
  public static int channelConfig = AudioFormat.CHANNEL_IN_STEREO;
  /**
   *  Audio data format :PCM 16 Bits per sample. Ensure equipment support. PCM 8 Bits per sample. No 1 You will get equipment support. 
   */
  public static int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
  /**
   *  Buffer byte size 
   */
  public static int bufferSizeInBytes = 0;
 
  public static AudioRecord audioRecord;
 
 
  /**
   *  Determine whether you have recording permission .
   */
  public static boolean isHasPermission(final Context context) {
    bufferSizeInBytes = 0;
    bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz,
        channelConfig, audioFormat);
    if (audioRecord == null) {
      audioRecord = new AudioRecord(audioSource, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes);
 
    }
    // Start recording audio 
    try {
      //  Prevent some mobile phones from crashing, such as Lenovo 
      audioRecord.startRecording();
    } catch (IllegalStateException e) {
      e.printStackTrace();
    }
 
    /**
     *  Judging whether there is recording authority according to starting recording s
     */
    if (audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) {
      return false;
    }
    audioRecord.stop();
    // Release resources 
    audioRecord.release();
    audioRecord = null;
 
    return true;
  }
 
}

Test class MainActivity


package com.example.a002034.testaudioperrmission;
 
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
 
/**
 * desc: Test recording permissions .
 * steps:
 *  Check whether you have permission -- Have -- Perform related actions 
 * -- No authority --
 * <p>
 * -- Determine the system version 
 * -- Less than 6.0  Direct access 
 * -- Greater than 6.0  Dynamic application authority 
 * -- Processing callback to application results 
 * <p>
 * -- Allow 
 * <p>
 * -- Reject 
 * <p>
 * test:
 * test1 build.gradle minsdk <23   Real machine android7.1  Recording permissions are configured in the manifest file 
 * test2 build.gradle minsdk >=23   Real machine android7.1  Recording permissions are configured in the manifest file 
 *
 * @author xuzhuyun
 * @date 2018/5/10
 */
public class MainActivity extends AppCompatActivity {
  private static final String TAG = "MainActivity";
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Check whether you have recording permission 
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)
        != PackageManager.PERMISSION_GRANTED) {
      Log.i(TAG, " No recording permission by default ");
      if (Build.VERSION.SDK_INT >= 23) {
        Log.i(TAG, " System version not less than android6.0  Need to apply for permission dynamically ");
        requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, 1001);
      }
    } else {
      Log.i(TAG, " Recording permission is available by default ");
    }
  }
 
  @Override
  public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                      @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1001) {
      // Mode 1 Calibration 
      boolean isHasAudioPermission = CheckAudioPermission.isHasPermission(this);
      Log.i(TAG, " Application for permission is completed , Current recording permissions :" + isHasAudioPermission);
      // Mode 2 Calibration 
      int result = 0;
      for (int i = 0; i < grantResults.length; i++) {
        if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
          result++;
        }
      }
      if (result != permissions.length) {
        // No permissions 
        Log.i(TAG, "onRequestPermissionsResult:  Application for permission is completed , Current recording permissions :false");
        return;
      }
      // Have authority 
      Log.i(TAG, "onRequestPermissionsResult:  Do you have permission after application :true");
    }
  }
 
}

Source code download: Android how to judge whether there is a recording on the mobile phone


Related articles: