/ / Android Visualizer error only in Android 6.0 - android, android-mediaplayer, visualizador

Android Visualizer error apenas no Android 6.0 - android, android-mediaplayer, visualizer

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 № 1

Talvez 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);
}