Zmieniłem telefon na Xiaomi Redmi Note 7(Android 9) i chciałem sprawdzić jak radzi sobie na nim moja aplikacja i tu pojawił się problem, bo program wcale się nie uruchamia. Testowałem go na sporej liczbie telefonów(od Xiaomi też) i tabletów i nigdy nie było żadnego problemu.
Dostaje taki błąd :
E/AndroidRuntime: FATAL EXCEPTION: main
Process: aaa.aaa.aa, PID: 25635
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setOnCompletionListener(android.media.MediaPlayer$OnCompletionListener)' on a null object reference
at aaa.aaa.aa.MyActivity.prepare_media_minigun(MyActivity.java:6789)
at aaa.aaa.aa.MyActivity.onClick(MyActivity.java:4176)
at android.view.View.performClick(View.java:6608)
at android.view.View.performClickInternal(View.java:6585)
at android.view.View.access$3100(View.java:785)
at android.view.View$PerformClick.run(View.java:25921)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
E/MQSEventManagerDelegate: failed to get MQSService.
E/MediaPlayerNative: Unable to create media player
D/MediaPlayer: create failed:
java.io.IOException: setDataSourceFD failed.: status=0x80000000
at android.media.MediaPlayer._setDataSource(Native Method)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1304)
at android.media.MediaPlayer.create(MediaPlayer.java:998)
at android.media.MediaPlayer.create(MediaPlayer.java:971)
Kod :
static void prepare_media_minigun()
{
for(int i=0;i<minigun_max_ammo;i++)
{
media_minigun[i]=new MediaPlayer();
if(minigun_silencer==false)
{
media_minigun[i]= MediaPlayer.create(context, R.raw.minigun);
}
else
{
media_minigun[i]= MediaPlayer.create(context, R.raw.minigun_ciszej);
}
media_minigun[i].setOnCompletionListener(new OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.release();
};
});
}
minigun_player_unloaded=false;
}
Tablica MediaPlayerów:
public static MediaPlayer[] media_minigun = new MediaPlayer[100] ;
Metoda prepare_madia_minigun() jest wywoływana w OnCreate().
Może ktoś z was miał podobny problem, bo ja już nie mam pomysłu. Szczególnie że błąd nie występuje na o wiele słabszych telefonach. Wygląda na to że jest jakiś problem z wczytywaniem dźwięków z folderu raw.
Z góry dzięki za pomoc