приложение работает на всех устройствах отлично, но в samsung galaxy note 3 и j5 он разбился при воспроизведении звука

// playSound метод и использовать его везде

 public void playSound1() {
                mp = MediaPlayer.create(getBaseContext(), (R.raw.clave_pop));  //sound file clave_pop in mp4 format firstly it is in m4a format then produced same problem then i use mp3 file
                if (sec_sound && mp != null)  //shared preference of sec_sound
                    mp.start();
                if (vibration)//also vibrate if shared preference of vibrator is true
                    v.vibrate(700);   //vibrate device

                mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                    }
                });
            }

        // and i am also used this but the same problem is occurred

        public void playSound1() {
            final MediaPlayer mp = MediaPlayer.create(Anulom_Activity.this, R.raw.clave_pop);  //sound file clave_pop in mp4 format firstly it is in m4a format then produced same problem then i use mp3 file
            if (sec_sound && mp != null) //shared preference of sec_sound
                mp.start();
            if (vibration) //also vibrate if shared preference of vibrator is true
                v.vibrate(700);  //device vibrate
            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    mp.release();
                }
            });
        }

    // but it shows 

/* java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setOnCompletionListener(android.media.MediaPlayer$OnCompletionListener)' on a null object reference
        at com.pixelpoint.Anulom_Activity.playSound1(Anulom_Activity.java:727)
        at com.pixelpoint.Anulom_Activity

//playSound method and use it everywhere

 public void playSound1() {
                mp = MediaPlayer.create(getBaseContext(), (R.raw.clave_pop));  //sound file clave_pop in mp4 format firstly it is in m4a format then produced same problem then i use mp3 file
                if (sec_sound && mp != null)  //shared preference of sec_sound
                    mp.start();
                if (vibration)//also vibrate if shared preference of vibrator is true
                    v.vibrate(700);   //vibrate device

                mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                    }
                });
            }

        // and i am also used this but the same problem is occurred

        public void playSound1() {
            final MediaPlayer mp = MediaPlayer.create(Anulom_Activity.this, R.raw.clave_pop);  //sound file clave_pop in mp4 format firstly it is in m4a format then produced same problem then i use mp3 file
            if (sec_sound && mp != null) //shared preference of sec_sound
                mp.start();
            if (vibration) //also vibrate if shared preference of vibrator is true
                v.vibrate(700);  //device vibrate
            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    mp.release();
                }
            });
        }

    // but it shows 

/* java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setOnCompletionListener(android.media.MediaPlayer$OnCompletionListener)' on a null object reference
        at com.pixelpoint.Anulom_Activity.playSound1(Anulom_Activity.java:727)
        at com.pixelpoint.Anulom_Activity$5$1$1.run(Anulom_Activity.java:325)
        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:5910)
        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:1405)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) */

//playSound method and use it everywhere

 public void playSound1() {
                mp = MediaPlayer.create(getBaseContext(), (R.raw.clave_pop));  //sound file clave_pop in mp4 format firstly it is in m4a format then produced same problem then i use mp3 file
                if (sec_sound && mp != null)  //shared preference of sec_sound
                    mp.start();
                if (vibration)//also vibrate if shared preference of vibrator is true
                    v.vibrate(700);   //vibrate device

                mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        mp.release();
                    }
                });
            }

        // and i am also used this but the same problem is occurred

        public void playSound1() {
            final MediaPlayer mp = MediaPlayer.create(Anulom_Activity.this, R.raw.clave_pop);  //sound file clave_pop in mp4 format firstly it is in m4a format then produced same problem then i use mp3 file
            if (sec_sound && mp != null) //shared preference of sec_sound
                mp.start();
            if (vibration) //also vibrate if shared preference of vibrator is true
                v.vibrate(700);  //device vibrate
            mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    mp.release();
                }
            });
        }

    // but it shows 

/* java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setOnCompletionListener(android.media.MediaPlayer$OnCompletionListener)' on a null object reference
        at com.pixelpoint.Anulom_Activity.playSound1(Anulom_Activity.java:727)
        at com.pixelpoint.Anulom_Activity$5$1$1.run(Anulom_Activity.java:325)
        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:5910)
        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:1405)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) */

.run(Anulom_Activity.java:325)
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:5910)
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:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) */

1 ответ

  1. MediaPlayer create (Context context,Uri uri)
    

    Удобный метод для создания медиаплеера для данного Uri. При успешном выполнении prepare() будет уже вызван и не должен быть
    позвонить снова.
    Когда вы закончите с MediaPlayer, вы должны вызвать release (), чтобы освободить ресурсы. Если не выпущено, слишком много экземпляров MediaPlayer будет
    результат в исключении.
    Обратите внимание, что так как prepare () вызывается автоматически в этом методе, вы не можете изменить тип аудиопотока (см. setAudioStreamType (int)),
    идентификатор аудио сеанса (см. setAudioSessionId( int)) или аудио атрибуты (см.
    setAudioAttributes (AudioAttributes) нового медиаплеера. Параметры
    контекст контекст: используемый контекст
    uri Uri: Uri, из которого будет получен источник данных
    Возвращается
    MediaPlayer объект MediaPlayer или null, если не удалось создать
    отменить выбор

    prepare () 
    

    Подготовка игрока к
    воспроизведение, синхронно. После установки источника данных и дисплея
    surface, необходимо либо вызвать prepare () или prepareAsync (). Для
    файлы, это нормально, чтобы вызвать prepare (), который блокирует, пока MediaPlayer
    готов к воспроизведению.

    в соответствии с вышеуказанной документацией вам нужно вызвать prepare или prepare async и установить Onpreparelistener. Дождитесь обратного звонка, а затем позвоните mp.запустите или установите прослушиватель Oncompletion.