一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android如何判斷手機是否有錄音權限的工具類

Android如何判斷手機是否有錄音權限的工具類

2022-03-07 14:40hgncxzy_ Android

這篇文章主要為大家詳細介紹了Android判斷手機是否有錄音的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

作用

判斷手機是否有錄音權限的工具類,兼容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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日日舔| 亚洲夜色夜色综合网站 | 三体动漫在线观看免费完整版2022 | 天天天综合网 | 欧美图片另类小说综合 | 精品一区二区视频 | 国产精品资源站 | 欧美综合在线 | 亚洲高清中文字幕一区二区三区 | 国产精品亚洲片在线va | 极品妖艳许清赵丽全文免费阅读 | 欧美 国产 日韩 第一页 | 成人国产在线观看 | 日本免费精品 | 青草国产在线视频 | 好舒服好爽再快点视频 | 亚洲精品午夜级久久久久 | 天天噜| 强波多野结衣女教师 | 国产一级片在线 | 青青草精品在线观看 | 欧美一级免费看 | 国产精品99久久免费观看 | 欧美日韩一区二区三区韩大 | 国产精品区牛牛影院 | 国产99视频精品免费视频免里 | 小辣椒精品福利视频导航 | 久久中文字幕亚洲精品最新 | 2021麻豆剧果冻传媒入口永久 | 国产精品夜夜爽张柏芝 | 亚洲 在线 日韩 欧美 | 久久99视热频国只有精品 | 成3d漫二区三区四区 | 国产精品久久久久a影院 | 奇米白色 | 国产精品99在线观看 | 5555国产在线观看精品 | 草莓视频看污 | 91精品久久国产青草 | 99久久免费看国产精品 | 亚洲高清在线天堂精品 |