/ / Error del visualizador de Android solo en Android 6.0 - android, android-mediaplayer, visualizer

Error de Android Visualizer solo en Android 6.0 - android, android-mediaplayer, visualizer

He encontrado un problema relacionado con Visualizer que solo se lleva a cabo en dispositivos con Android 6.0. No se sabe muy bien por qué sucede, por lo que se agradecerá cualquier tipo de ayuda. Aquí está la pila de error:

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)

Y aquí está el código que lo 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();
}
}

Cualquier ayuda sería apreciada. Gracias de antemano =)

Respuestas

5 para la respuesta № 1

Tal vez el componente (s) subyacente (s) necesita algoPermisos que no se otorgan automáticamente en 6.0. Ir a AppInfo para esta aplicación; navegar a los permisos; Asegurar que todos los permisos que esta aplicación ha solicitado hayan sido otorgados.


1 para la respuesta № 2

Asegúrese de tener este permiso en su Manifiesto como lo requiere el Visualizador.

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

Como este permiso es "peligroso", también debe pedirle al usuario que otorgue el permiso en tiempo de ejecución.


0 para la respuesta № 3

¿Puedes intentar agregar a tu lista de permisos en tu archivo manifiesto?

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

0 para la respuesta № 4

Esto me estaba volviendo loco por semanas ... me estaba enfocando en mi Visualizer código, donde el 6.El sistema de permisos 0 fue el problema. He probado esto en 4.2.2, 5.0 y 6.0.1 en dispositivos reales. Todavía no sé por qué el cuadro de diálogo de permisos nunca aparece cuando estoy probando la aplicación en dispositivos reales. Además, enciendo manualmente Microphone permiso resolvió el problema, en la configuración de información de la aplicación.

if (ActivityCompat.checkSelfPermission(context, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String[]{android.Manifest.permission.RECORD_AUDIO}, 1);
}