- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序的录音权限被用户禁止。问题是一些 android 操作系统设备 `audio_recorder.getRecordingState()` 总是返回 `AudioRecord.RECORDSTATE_RECORDING`。这不是正确的结果。
如何知道录音权限可用?
public final class MtAudioRecord {
private static final String TAG = "audioRecord";
private static MtAudioRecord instance = null;
public static int SAMPLE_RATE = 44100;// default 44100
public static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO;
public static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
public static final int AUDIO_SOURCE = MediaRecorder.AudioSource.MIC;
private AudioRecord mAudioRecord;
private final int minBufferSize;
private boolean isRecording = true;
private static short[] audioData = null;
public static final MtAudioRecord getInstance() {
if (null == instance) {
instance = new MtAudioRecord();
}
return instance;
}
public MtAudioRecord() {
minBufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT);
if (minBufferSize == AudioRecord.ERROR_BAD_VALUE) {
} else if (minBufferSize == AudioRecord.ERROR) {
} else {
mAudioRecord =
new AudioRecord(AudioSource.MIC, SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT, minBufferSize);
}
audioData = new short[minBufferSize];
}
public synchronized void start() {
new Thread(new Runnable() {
@Override
public void run() {
if(null != mAudioRecord){
if (mAudioRecord.getRecordingState() != AudioRecord.STATE_INITIALIZED) {
Log.e(TAG, "Mic didn't successfully initialized");
return;
}
mAudioRecord.startRecording();
Log.e(TAG, "recording state = " + mAudioRecord.getRecordingState());
if (mAudioRecord.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING) {
Log.e(TAG, "Mic is in use and can't be accessed");
return;
}
isRecording = true;
while (isRecording && null != mAudioRecord) {
if (null == audioData) {
audioData = new short[minBufferSize];
}
final int read_distance = mAudioRecord.read(audioData, 0, minBufferSize);
if (read_distance == AudioRecord.ERROR_INVALID_OPERATION || read_distance == AudioRecord.ERROR || read_distance == AudioRecord.ERROR_BAD_VALUE) {
isRecording = false;
break;
}
}
if (mAudioRecord != null) {
mAudioRecord.stop();
mAudioRecord.release();
mAudioRecord = null;
}
}
}
}).start();
}
public synchronized void stop() {
isRecording = false;
}
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
最佳答案
我认为您应该改用 AudioManager
。这有助于您检查麦克风是否已被用户静音。您可能搜索的方法是 isMicrophoneMute()
,它返回 bool 值。
这是 Android 开发者网站中 AudioManager 的链接。 Android Audio Manager
函数描述为here
你的 toast 不正确,应该是:
Toast.makeText(applicationContext(),"The microphone is
disabled",Toast.LENGTH_SHORT).show();
更新: 你可以使用 Context.checkCallingOrSelfPermission(String permission);
permission 是描述你需要的权限的字符串:android.permission.RECORD_AUDIO
它应该返回 PERMISSION_GRANTED 或 PERMISSION_DENIED 的整数结果
在此处查看 android 开发者网站中的描述:check permission
例如:
public boolean checkRecordingPermission()
{
String permission = "android.permission.RECORD_AUDIO";
int result = getContext().checkCallingOrSelfPermission(permission);
return (result == PackageManager.PERMISSION_GRANTED);
}
关于android - 如何知道我的应用程序的 AudioRecord 权限是否被禁止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25640326/
Android:我想从麦克风读取缓冲区以便我可以对其执行处理,以下是我的代码 int sampleRateInHz = 8000;// 44100, 22050 and 11025 i
我正在尝试在我的 Android 应用程序中将音频读取为 16 位整数。我使用 Xamarin.android 编写了这个应用程序。我为此使用 AudioRecord 低级库,因为我需要从手机麦克风读
访问AudioRecord.Builder的正确方法是什么?在 JNI 级别? 类似于AudioRecord类。 (jclass)jni_env->NewGlobalRef(jni_env->Find
嗨,我正在构建一个应用程序,它将使用来自 MIC 的传入音频并将其与存储的声音文件进行比较。目前,我正试图掌握 AudioRecord 函数中的数据在保存到字节数组时的样子。我的问题是返回的值都是零。
我打算在 Android 4.4.2 设备上录制立体声音频。但是,通过简单的录音应用程序(使用 AudioRecord)录制的音频与提供的配置不匹配。如果设备使用默认配置值,我希望在 logcat 中
我已经构建了一个监听背景噪音的应用程序。我发现,在收听时,用户无法调用电话或使用任何其他录制音频的应用程序。我想知道是否有一种方法可以在通话之前同时允许录制音频或显式禁用声音?这将如何实现? 最佳答案
请同时查看我的其他问题,因为我认为它们是相关的: Question 1 Question 2 Question 3 这是我正在使用的代码,当我按下按钮时,它将麦克风获得的音频信号传递到扬声器: pub
我在使用 AudioRecord 时遇到问题。 我正在开发一个应用程序,需要记录来自 MIC 的一些脉冲响应并用它制作一些 DSP。 捕获的音频存储在 WAV 文件中,然后从该文件绘制。 我创建了一个
我已经在我的 android 应用程序中使用 Mic 进行了录音,当使用 AudioPlayer 类将数据流式传输进来时,它播放得非常好。我的问题是我想向该数据附加一个 wav header ,以便它
我正在使用 AudioRecord 类录制音频。我想将音频录制到我的 Assets 文件夹或资源文件夹中的特定文件中。我认为录制没有问题。但是在读取缓冲区时它显示出一些问题(它正在抛出NullPoin
我目前正在开始为 Android 编写一个软件,该软件将要测量封闭房间的混响时间。 我不得不选择 AudioRecord而不是 MediaRecorder因为它让我有机会获得原始数据。 您可能知道 A
我使用 AudioRecorder 记录了 50 毫秒(10-12KHz 频率)的线性调频信号。在安静的房间里,距离为 50/60 厘米时,信号频谱图如下所示 背景中有很多噪音,还有一些回声。我想知道
我在使用 AudioRecord for Android 时遇到了问题。我已经尽可能多地在网上找到有关它的信息,但我似乎无法进行良好的初始化。 我创建 AudioRecord 对象的代码是这样的:
我想录制音频并以 WAV 格式播放。我必须使用 AudioRecord 来完成。有人可以帮我吗? 我经历了这个例子, http://androidsourcecode.blogspot.com.au/
我编写了一个标准代码,用于使用 AudioRecord 从麦克风接收数据。这是我的代码: AudioReceiver() { int minHardwareBufferSize = Audio
我的实验是这样的:首先,我使用matlab创建一个指定的wave文件,速率为44100,这意味着任何持续1s的 fragment 都包含44100个元素,这些元素以double形式呈现。然后,我使用智
我只在 Motorola Milestone 上遇到这个问题。代码: // init recorder recordInstance = new AudioRecord(MediaRecorder.A
我正在努力解决这个问题,我已经更改了比特率以减小录制文件的大小,我的应用程序正确地将音频文件发布到服务器,但我想最小化文件大小,这是我的录制代码 private void startRecordin
我正在尝试使用 AudioRecord 从麦克风录制一些音频。录音有效,但音量太大,而且我的剪报很糟糕。我尝试使用 AutomaticGainControl,但它在我的设备上不可用。有没有其他方法可以
我看了很多关于 AudioRecorder 初始化问题的帖子,所以我用一个函数来测试每一种可能性。不幸的是,没有工作的。我应该检查什么? @Override public void onCreat
我是一名优秀的程序员,十分优秀!