溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android如何判斷手機(jī)是否有錄音權(quán)限的工具類

發(fā)布時(shí)間:2020-09-20 00:31:02 來(lái)源:腳本之家 閱讀:187 作者:hgncxzy_ 欄目:移動(dòng)開(kāi)發(fā)

作用

判斷手機(jī)是否有錄音權(quán)限的工具類,兼容6.0以上以及以下android系統(tǒng)

測(cè)試環(huán)境

這篇文章是評(píng)論中的網(wǎng)友提出質(zhì)疑后,經(jīng)過(guò)重寫修改與重寫測(cè)試后編寫的,我的調(diào)試環(huán)境是小米note3,Android7.1的系統(tǒng)。

記得在清單文件中配置對(duì)應(yīng)的權(quán)限。

思路

檢測(cè)是否有權(quán)限

-->有權(quán)限--執(zhí)行相關(guān)操作

-->無(wú)權(quán)限-- 判斷系統(tǒng)版本

--大于等于6.0 --動(dòng)態(tài)申請(qǐng)權(quán)限

-->對(duì)申請(qǐng)結(jié)果的回調(diào)處理
--允許
--拒絕

代碼

工具類CheckAudioPermission.java

package com.example.a002034.testaudioperrmission;
 
import android.content.Context;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
 
/**
 * Function:判斷錄音權(quán)限,兼容android6.0以下以及以上系統(tǒng)
 *
 * @author xuzhuyun
 * @date 2018/5/10
 */
 
public class CheckAudioPermission {
  /**
   * 音頻獲取源
   */
  public static int audioSource = MediaRecorder.AudioSource.MIC;
  /**
   * 設(shè)置音頻采樣率,44100是目前的標(biāo)準(zhǔn),但是某些設(shè)備仍然支持22050,16000,11025
   */
  public static int sampleRateInHz = 44100;
 
  /**
   * 設(shè)置音頻的錄制的聲道CHANNEL_IN_STEREO為雙聲道,CHANNEL_CONFIGURATION_MONO為單聲道
   */
  public static int channelConfig = AudioFormat.CHANNEL_IN_STEREO;
  /**
   * 音頻數(shù)據(jù)格式:PCM 16位每個(gè)樣本。保證設(shè)備支持。PCM 8位每個(gè)樣本。不一定能得到設(shè)備支持。
   */
  public static int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
  /**
   * 緩沖區(qū)字節(jié)大小
   */
  public static int bufferSizeInBytes = 0;
 
  public static AudioRecord audioRecord;
 
 
  /**
   * 判斷是是否有錄音權(quán)限.
   */
  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);
 
    }
    //開(kāi)始錄制音頻
    try {
      // 防止某些手機(jī)崩潰,例如聯(lián)想
      audioRecord.startRecording();
    } catch (IllegalStateException e) {
      e.printStackTrace();
    }
 
    /**
     * 根據(jù)開(kāi)始錄音判斷是否有錄音權(quán)限s
     */
    if (audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) {
      return false;
    }
    audioRecord.stop();
    //釋放資源
    audioRecord.release();
    audioRecord = null;
 
    return true;
  }
 
}

測(cè)試類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:測(cè)試錄音權(quán)限.
 * steps:
 * 檢測(cè)是否有權(quán)限--有--執(zhí)行相關(guān)操作
 * --無(wú)權(quán)限--
 * <p>
 * --判斷系統(tǒng)版本
 * --小于6.0 直接獲取
 * --大于6.0 動(dòng)態(tài)申請(qǐng)權(quán)限
 * --對(duì)申請(qǐng)結(jié)果的處理回調(diào)
 * <p>
 * --允許
 * <p>
 * --拒絕
 * <p>
 * test:
 * test1 build.gradle minsdk <23  真機(jī)android7.1 清單文件中配置了錄音權(quán)限
 * test2 build.gradle minsdk >=23  真機(jī)android7.1 清單文件中配置了錄音權(quán)限
 *
 * @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);
    //檢測(cè)是否有錄音權(quán)限
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)
        != PackageManager.PERMISSION_GRANTED) {
      Log.i(TAG, "默認(rèn)無(wú)錄音權(quán)限");
      if (Build.VERSION.SDK_INT >= 23) {
        Log.i(TAG, "系統(tǒng)版本不低于android6.0 ,需要?jiǎng)討B(tài)申請(qǐng)權(quán)限");
        requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, 1001);
      }
    } else {
      Log.i(TAG, "默認(rèn)有錄音權(quán)限");
    }
  }
 
  @Override
  public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                      @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 1001) {
      //方式一校驗(yàn)
      boolean isHasAudioPermission = CheckAudioPermission.isHasPermission(this);
      Log.i(TAG, "申請(qǐng)權(quán)限完畢,當(dāng)前錄音權(quán)限:" + isHasAudioPermission);
      //方式二校驗(yàn)
      int result = 0;
      for (int i = 0; i < grantResults.length; i++) {
        if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
          result++;
        }
      }
      if (result != permissions.length) {
        //沒(méi)有權(quán)限
        Log.i(TAG, "onRequestPermissionsResult: 申請(qǐng)權(quán)限完畢,當(dāng)前錄音權(quán)限:false");
        return;
      }
      //有權(quán)限
      Log.i(TAG, "onRequestPermissionsResult: 申請(qǐng)后,是否有權(quán)限:true");
    }
  }
 
}

源碼下載:Android如何判斷手機(jī)是否有錄音

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI