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