作用
判斷手機是否有錄音權限的工具類,兼容6.0以上以及以下android系統
測試環境
這篇文章是評論中的網友提出質疑后,經過重寫修改與重寫測試后編寫的,我的調試環境是小米note3,Android7.1的系統。
記得在清單文件中配置對應的權限。
思路
檢測是否有權限
-->有權限--執行相關操作
-->無權限-- 判斷系統版本
--大于等于6.0 --動態申請權限
-->對申請結果的回調處理
--允許
--拒絕
代碼
工具類CheckAudioPermission.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
package com.example.a002034.testaudioperrmission; import android.content.Context; import android.media.AudioFormat; import android.media.AudioRecord; import android.media.MediaRecorder; /** * Function:判斷錄音權限,兼容android6.0以下以及以上系統 * * @author xuzhuyun * @date 2018/5/10 */ public class CheckAudioPermission { /** * 音頻獲取源 */ public static int audioSource = MediaRecorder.AudioSource.MIC; /** * 設置音頻采樣率,44100是目前的標準,但是某些設備仍然支持22050,16000,11025 */ public static int sampleRateInHz = 44100 ; /** * 設置音頻的錄制的聲道CHANNEL_IN_STEREO為雙聲道,CHANNEL_CONFIGURATION_MONO為單聲道 */ public static int channelConfig = AudioFormat.CHANNEL_IN_STEREO; /** * 音頻數據格式:PCM 16位每個樣本。保證設備支持。PCM 8位每個樣本。不一定能得到設備支持。 */ public static int audioFormat = AudioFormat.ENCODING_PCM_16BIT; /** * 緩沖區字節大小 */ public static int bufferSizeInBytes = 0 ; public static AudioRecord audioRecord; /** * 判斷是是否有錄音權限. */ 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); } //開始錄制音頻 try { // 防止某些手機崩潰,例如聯想 audioRecord.startRecording(); } catch (IllegalStateException e) { e.printStackTrace(); } /** * 根據開始錄音判斷是否有錄音權限s */ if (audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) { return false ; } audioRecord.stop(); //釋放資源 audioRecord.release(); audioRecord = null ; return true ; } } |
測試類MainActivity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
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:測試錄音權限. * steps: * 檢測是否有權限--有--執行相關操作 * --無權限-- * <p> * --判斷系統版本 * --小于6.0 直接獲取 * --大于6.0 動態申請權限 * --對申請結果的處理回調 * <p> * --允許 * <p> * --拒絕 * <p> * test: * test1 build.gradle minsdk <23 真機android7.1 清單文件中配置了錄音權限 * test2 build.gradle minsdk >=23 真機android7.1 清單文件中配置了錄音權限 * * @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); //檢測是否有錄音權限 if (ContextCompat.checkSelfPermission( this , Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { Log.i(TAG, "默認無錄音權限" ); if (Build.VERSION.SDK_INT >= 23 ) { Log.i(TAG, "系統版本不低于android6.0 ,需要動態申請權限" ); requestPermissions( new String[]{Manifest.permission.RECORD_AUDIO}, 1001 ); } } else { Log.i(TAG, "默認有錄音權限" ); } } @Override public void onRequestPermissionsResult( int requestCode, @NonNull String[] permissions, @NonNull int [] grantResults) { super .onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 1001 ) { //方式一校驗 boolean isHasAudioPermission = CheckAudioPermission.isHasPermission( this ); Log.i(TAG, "申請權限完畢,當前錄音權限:" + isHasAudioPermission); //方式二校驗 int result = 0 ; for ( int i = 0 ; i < grantResults.length; i++) { if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { result++; } } if (result != permissions.length) { //沒有權限 Log.i(TAG, "onRequestPermissionsResult: 申請權限完畢,當前錄音權限:false" ); return ; } //有權限 Log.i(TAG, "onRequestPermissionsResult: 申請后,是否有權限:true" ); } } } |
源碼下載:Android如何判斷手機是否有錄音
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/jdfkldjlkjdl/article/details/54618739