Android麦克风不断在新设备上提供32639或-32640

时间:2017-06-15 18:21:37

标签: android audio audio-recording

我实现了与this类似的代码。我在日志中发出了噪音警报,但无论外面发生什么样的噪音,它总是会32639-32640

short[] buffer = new short[minSize];
boolean thresholdMet = false;
int threshold = sliderThreshold.getProgress();

ar.read(buffer, 0, minSize);

//Iterate through each chunk of amplitude data
//Check if amplitude is greater than threshold
for (short s : buffer) {
    if (Math.abs(s) > threshold) {
        thresholdMet = true;
        Log.w("NoiseThreshold", String.valueOf(s));
        break;
    }
}

我在三部手机上测试过它们(没有一部是根):

  • 三星Galaxy S3(API 19)
  • HTC One M9(API 23)
  • 三星Galaxy S7(API 24)

它适用于S3,但不适用于其他。我尝试在HTC上使用传感器感应,它不适用于麦克风传感器。但是,它曾经工作过,现在似乎在图表视图中每五秒左右检测一个样本。

奇怪的是,麦克风仍能正常用于在故障手机上拨打电话和录像。

1 个答案:

答案 0 :(得分:2)

你说它适用于S3,它是API 19,而不适用于API> = 23的那些。因此,您可能会遇到API 23中引入的运行时权限问题。

新行为(对于使用静态权限模型的“旧应用程序”)是在未授予运行时权限的情况下返回虚拟数据。

看看这个答案: Request permission for microphone on Android M