Android startRecording()调用三星S7手机上未初始化的录音
我有一个调谐器应用程序,并使用音频录制对象收听麦克风。我想知道它在大多数设备和安卓版本(甚至安卓6)上都能正常工作,但我从三星S7手机的客户那里得到了错误报告。为了避免这个错误,我在这里查看了类似的帖子,这对我帮助很大。但现在我不明白为什么只有S7手机在其他安卓6设备上工作正常时才会出现这种错误 另外,我没有S7手机,所以我没有机会尝试一些东西。我只是想知道是否有人有类似的问题,S7手机会有什么问题。有什么想法吗Android startRecording()调用三星S7手机上未初始化的录音,android,android-studio,audiorecord,tuner,Android,Android Studio,Audiorecord,Tuner,我有一个调谐器应用程序,并使用音频录制对象收听麦克风。我想知道它在大多数设备和安卓版本(甚至安卓6)上都能正常工作,但我从三星S7手机的客户那里得到了错误报告。为了避免这个错误,我在这里查看了类似的帖子,这对我帮助很大。但现在我不明白为什么只有S7手机在其他安卓6设备上工作正常时才会出现这种错误 另外,我没有S7手机,所以我没有机会尝试一些东西。我只是想知道是否有人有类似的问题,S7手机会有什么问题。有什么想法吗 @Override public View onCreateView(L
@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手机上崩溃,而且在其他一些安卓6.0设备上也崩溃。我意识到我犯了一个愚蠢的错误,那个就是我忘了处理棉花糖带来的新运行时权限设计。这让我感到困惑,它正在其他安卓6.0设备上工作。我猜那些人已经从设备设置中为我的应用程序授予了权限
因此,我在我的应用程序中为棉花糖实现了运行时权限,现在它正在工作。请发布相关代码。这样回答您的问题是不可能的。嘿,我添加了代码。请也发布logcat输出。您注意到这一点的权限是什么?我们也有同样的问题!在我的例子中录制_音频,但问题在于没有为Android 6.0+设备实现运行时权限