Eu encontrei um problema relacionado ao Visualizer que ocorre apenas em dispositivos Android 6.0. Não sei realmente por que isso acontece, então qualquer tipo de ajuda seria apreciada. Aqui está a pilha de erros:
AudioEffect: set(): AudioFlinger could not create effect, status: -1
visualizers-JNI: Visualizer initCheck failed -3
Visualizer-JAVA: Error code -3 when initializing Visualizer.
java.lang.RuntimeException: Cannot initialize Visualizer engine, error: -3
System.err: at android.media.audiofx.Visualizer.<init>(Visualizer.java:218)
System.err: at com.xxx.xxxx.customviews.visualizer.VisualizerView.link(VisualizerView.java:101)
e aqui está o código que o causa:
public void link(MediaPlayer player) {
if (player == null) {
throw new NullPointerException("Cannot link to null MediaPlayer");
}
Equalizer mEqualizer = new Equalizer(0, player.getAudioSessionId());
mEqualizer.setEnabled(true); // need to enable equalizer
try {
int aud = player.getAudioSessionId();
**mVisualizer = new Visualizer(aud);**
mVisualizer.setEnabled(false);
mVisualizer.setCaptureSize(Visualizer.getCaptureSizeRange()[1]);
Visualizer.OnDataCaptureListener captureListener = new Visualizer.OnDataCaptureListener() {
@Override
public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) {
updateVisualizer(bytes);
}
@Override
public void onFftDataCapture(Visualizer visualizer, byte[] bytes, int samplingRate) {
updateVisualizerFFT(bytes);
}
};
mVisualizer.setDataCaptureListener(captureListener, Visualizer.getMaxCaptureRate() / 2, true, true);
mVisualizer.setEnabled(true);
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mVisualizer.setEnabled(false);
}
});
}catch(Exception e) {
e.printStackTrace();
}
}
Qualquer ajuda seria apreciada. Agradecemos antecipadamente =)
Respostas:
5 para resposta № 1Talvez o (s) componente (s) subjacente (s) precise depermissões que não são concedidas automaticamente no 6.0. Vá para AppInfo para este aplicativo; navegue para permissões; verifique se todas as permissões que este aplicativo solicitou foram concedidas.
1 para resposta № 2
Verifique se você tem essa permissão em seu manifesto, conforme o Visualizador exigir.
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
Como essa permissão é "perigosa", você também precisa solicitar ao usuário que conceda a permissão em tempo de execução.
0 para resposta № 3
Você pode tentar adicionar à sua lista de permissões no seu arquivo de manifesto:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
0 para a resposta № 4
Isso estava me deixando louco por semanas ... eu estava focando no meu Visualizer
código, onde o 6.0 sistema de permissão foi o problema. Eu testei isso em 4.2.2, 5.0 e 6.0.1 em dispositivos reais. Ainda não sei por que a caixa de diálogo de permissão nunca aparece quando estou testando o aplicativo em dispositivos reais. Além disso, ativando manualmente o Microphone
permissão resolveu o problema nas configurações de informações do aplicativo.
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String[]{android.Manifest.permission.RECORD_AUDIO}, 1);
}