android 动态录音权限,Android如何判断手机是否有录音权限的工具类
作用
判斷手機是否有錄音權限的工具類,兼容6.0以上以及以下android系統
測試環境
這篇文章是評論中的網友提出質疑后,經過重寫修改與重寫測試后編寫的,我的調試環境是小米note3,Android7.1的系統。
記得在清單文件中配置對應的權限。
思路
檢測是否有權限
-->有權限--執行相關操作
-->無權限-- 判斷系統版本
--大于等于6.0 --動態申請權限
-->對申請結果的回調處理
--允許
--拒絕
代碼
工具類CheckAudioPermission.java
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
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:
* 檢測是否有權限--有--執行相關操作
* --無權限--
*
* --判斷系統版本
* --小于6.0 直接獲取
* --大于6.0 動態申請權限
* --對申請結果的處理回調
*
* --允許
*
* --拒絕
*
* 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 动态录音权限,Android如何判断手机是否有录音权限的工具类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言中div函数,C 库函数
- 下一篇: android studio scala