Почему MediaPlayer останавливается на состоянии перезапуска приложения в Android? - PullRequest
0 голосов
/ 27 сентября 2019

Я сделал приложение для Soundboard, и оно работает, но когда я нажимаю кнопку «Домой» на телефоне и нажимаю, чтобы вернуть приложение, когда я нажимаю кнопку для звука, оно перестает работать (вылетает)

private MediaPlayer mp;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mp = MediaPlayer.create(this, R.raw.iaminevitable);

        iaminevitable = (Button) findViewById(R.id.iaminevitable);
        iaminevitable.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mp.start();
            }
        });

 @Override
    protected void onStop() {
        super.onStop();
        if (mp != null) {
            mp.reset();
            mp.release();
            mp = null;
        }

My Error Logcat =

Process: soundboard.test, PID: 5429
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.start()' on a null object reference
        at soundboard.test.MainActivity$6.onClick(MainActivity.java:96)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5293)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Ответы [ 4 ]

2 голосов
/ 27 сентября 2019

дали ли вы необходимые разрешения?проверьте его и, пожалуйста, добавьте еще немного кода в хранилище и т. д. или, если проблема связана с жизненным циклом активности, просто добавьте этот код

@Override
public void onRestart()
{
    super.onRestart();
     recreate();
    finish();
    overridePendingTransition(0, 0);
    startActivity(getIntent());
    overridePendingTransition(0, 0);
}
0 голосов
/ 27 сентября 2019

добавить метод onResume, как показано ниже

 @Override
        protected void onResume() {
            super.onResume();
            if (mp != null) {
                //if want to start again when open app
                mp.start();

                //play when click button
    //            iaminevitable.setOnClickListener(new View.OnClickListener() {
    //                @Override
    //                public void onClick(View view) {
    //                    mp.start();
    //                }
    //            });
            }
        }
0 голосов
/ 27 сентября 2019

Вы должны понимать activity lifecycle и разрешения, необходимые для аудиофайлов.
На вашем месте я бы использовал следующие разрешения.

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

В onCreate() вы должны инициализировать и уничтожить методом onDestroy().Проверьте, какой метод вызывается, когда приложение переходит в фоновый режим.Учиться.Вот ссылка на , чтобы узнать о жизненном цикле деятельности .

0 голосов
/ 27 сентября 2019

Медиаплеер установлен в нуль, когда приложение переходит в фоновый режим, но не воссоздается, когда действие снова выводится на передний план (onCreate() не вызывается).Вы должны обрабатывать инициализацию и уничтожение объектов в парных обратных вызовах жизненного цикла, таких как

  • onCreate() и onDestroy()

  • onStart() и onStop()

  • onResume() и onPause()

...