안드로이드 핸드폰에 녹음이 있는지 아닌지를 판단합니다.
핸드폰에 녹음 권한이 있는지 판단하는 도구류는 6.0 이상 및android 시스템을 호환합니다
테스트 환경
이 글은 댓글 속의 네티즌들이 의문을 제기한 후 리메이크 수정과 리메이크 테스트를 거쳐 작성한 것이다. 나의 디버깅 환경은 샤오미 노트3, 안드로이드7.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");
}
}
}
원본 다운로드
https://download.csdn.net/download/jdfkldjlkjdl/10405148
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.