gpt4 book ai didi

android - startRecording() 在三星 S7 手机上调用未初始化的 AudioRecord

转载 作者:行者123 更新时间:2023-11-29 20:00:29 27 4
gpt4 key购买 nike

我有一个调谐器应用程序并使用 Audio Record 对象收听麦克风。我想了解它适用于大多数设备和 Android 版本(甚至 Android 6),但我收到来自三星 S7 手机客户的错误报告。我在这里查看了类似的帖子以避免这个错误,它对我帮助很大。但现在我不明白为什么只有 S7 手机出现此错误,而它在其他 Android 6 设备上运行良好。

附言我没有 S7 手机,所以我没有机会尝试。我只是想知道是否有人有类似的问题以及 S7 手机可能有什么问题。有什么想法吗?

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

initAudioRecord(44100, 2048);
.....

}

public void initAudioRecord(int sampleRateInHz, int bufferSizeInBytes) {

AudioRecord audioRecord = AudioRecordInstance(sampleRateInHz, bufferSizeInBytes);


if (audioRecord.getState() != AudioRecord.STATE_UNINITIALIZED) {
if (audioRecord.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED) {
audioRecord.stop();
}
audioRecord.release();
audioRecord = AudioRecordInstance(sampleRateInHz, bufferSizeInBytes);

}

audioRecord.startRecording();

}

public AudioRecord AudioRecordInstance(int sampleRateInHz, int bufferSizeInBytes){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
return new AudioRecord.Builder()
.setAudioSource(MediaRecorder.AudioSource.MIC)
.setAudioFormat(new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(sampleRateInHz)
.setChannelMask(AudioFormat.CHANNEL_IN_MONO)
.build())
.setBufferSizeInBytes(2*bufferSizeInBytes)
.build();
}else{
return new AudioRecord(
MediaRecorder.AudioSource.MIC,
sampleRateInHz,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT,
bufferSizeInBytes * 2);
}
}
}

日志:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tuner/com.tuner.TunerActivity}: java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

最佳答案

最后我注意到它不仅在 S7 手机上崩溃,而且在其他一些 Android 6.0 设备上也崩溃。我意识到我的愚蠢错误,我忘了处理棉花糖带来的新运行时权限设计。这让我感到困惑,它是否适用于其他一些 Android 6.0 设备。我想这些是已经从设备设置中为我的应用程序授予权限的那些。

因此,我在 Marshmallow 的应用程序中实现了运行时权限,现在它可以正常工作了。

关于android - startRecording() 在三星 S7 手机上调用未初始化的 AudioRecord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36344491/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com