Воспроизведение аудио файла с помощью Android Media Player - PullRequest
0 голосов
/ 29 ноября 2018

В моем приложении я использую медиаплеер для воспроизведения одного аудиофайла (12 МБ).Приложение содержит три действия ManiActivity, MWlyrics, О.Звук воспроизводится в MainActivity, проблема заключается в том, что я переключаюсь между этими действиями. Звук перестает воспроизводиться.

 public class MainActivity extends AppCompatActivity {
        private MediaPlayer mp;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mp = MediaPlayer.create(this, R.raw.abc);
            getSupportActionBar().setElevation(0);
            ImageView imageView = (ImageView)findViewById(R.id.main_img_lm);
            Glide.with(this).load(R.drawable.lm)
                    .thumbnail(0.5f)
                    .into(imageView);




            }




            //play song method

        public void playSong (View v){
            mp.start();

        }

          //pause song method

        public void pauseSong (View v){
            mp.pause();
        }


          //stop song method

        public void stopSong (View v){
            mp.stop();
            mp = MediaPlayer.create(this, R.raw.abc);

            }

          // main menu
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menur, menu);

            menu.add(0, 1, 1, menuIconWithText(getResources().getDrawable(R.drawable.ic_rate), getResources().getString(R.string.rate_us)));
            menu.add(0, 2, 2, menuIconWithText(getResources().getDrawable(R.drawable.ic_apps), getResources().getString(R.string.more_apps)));
            menu.add(0, 3, 3, menuIconWithText(getResources().getDrawable(R.drawable.ic_share), getResources().getString(R.string.share_app)));
            menu.add(0, 4, 4, menuIconWithText(getResources().getDrawable(R.drawable.ic_info), getResources().getString(R.string.about)));
            menu.add(0, 5, 5, menuIconWithText(getResources().getDrawable(R.drawable.ic_exit), getResources().getString(R.string.exit)));
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {


            switch (item.getItemId()) {

                    case 1:
                        Toast.makeText(MainActivity.this, "redirecting to rate us and review page page", Toast.LENGTH_SHORT).show();
                    return true;

                    case 2:
                        Toast.makeText(MainActivity.this, "thank you for using", Toast.LENGTH_SHORT).show();
                    return true;

                    case 3:
                        Toast.makeText(MainActivity.this, "sharing app..", Toast.LENGTH_SHORT).show();
                    return true;

                    case 4:
                        Toast.makeText(MainActivity.this, "about this app", Toast.LENGTH_SHORT).show();
                        Intent j = new Intent(this,About.class);
                        startActivity(j);
                        return true;

                    case 5:
                       finish();
                       mp.release();
                       return true;

                    case R.id.mdwtid:
                    Intent i = new Intent(this,MWLyrics.class);
                    startActivity(i);
                    return true;


            }

            return super.onOptionsItemSelected(item);
        }




        private CharSequence menuIconWithText(Drawable r, String title) {

            r.setBounds(0, 0, r.getIntrinsicWidth(), r.getIntrinsicHeight());
            SpannableString sb = new SpannableString("    " + title);
            ImageSpan imageSpan = new ImageSpan(r, ImageSpan.ALIGN_BOTTOM);
            sb.setSpan(imageSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

            return sb;
        }
    }

Сведения о приложении ..

MainActiviy - отображает изображение альбома и[воспроизведение, пауза и остановка] images.

Mwlyrics - отображает текст песни.

About - отображать информацию о приложении.

Как решить эту проблему ..

  1. Как продолжить воспроизведение звука при переключении между другими действиями без каких-либо перерывов.

  2. Как эффективно использовать этот аудиофайл в приложении ... с учетом памяти.

при тестировании приложения на моем мобильном телефоне (moto one power, android pie), я заметил, что частота (иногда работает 40%) и максимальное использование 170 мб.Что это точно значит.Я новичок в разработке Android, и мне нужно несколько советов по этому поводу.

1 Ответ

0 голосов
/ 29 ноября 2018

Для этого вам нужно воспользоваться услугой.Вы можете проверить ниже код

class BackgroundAudioService extends Service implements OnCompletionListener {
  MediaPlayer mediaPlayer;

  @Override
  public IBinder onBind(Intent intent) {
    return null;
  }

  @Override
  public void onCreate() {
    mediaPlayer = MediaPlayer.create(this, R.raw.s);// raw/s.mp3
    mediaPlayer.setOnCompletionListener(this);
  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    if (!mediaPlayer.isPlaying()) {
      mediaPlayer.start();
    }
    return START_STICKY;
  }

  public void onDestroy() {
    if (mediaPlayer.isPlaying()) {
      mediaPlayer.stop();
    }
    mediaPlayer.release();
  }

  public void onCompletion(MediaPlayer _mediaPlayer) {
    stopSelf();
  }

}

Вы можете запустить службу, как это

public class Test extends Activity implements OnClickListener {

  Button startPlaybackButton, stopPlaybackButton;
  Intent playbackServiceIntent;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    startPlaybackButton = (Button) this.findViewById(R.id.StartPlaybackButton);
    stopPlaybackButton = (Button) this.findViewById(R.id.StopPlaybackButton);

    startPlaybackButton.setOnClickListener(this);
    stopPlaybackButton.setOnClickListener(this);

    playbackServiceIntent = new Intent(this, BackgroundAudioService.class);
  }

  public void onClick(View v) {
    if (v == startPlaybackButton) {
      startService(playbackServiceIntent);
      finish();
    } else if (v == stopPlaybackButton) {
      stopService(playbackServiceIntent);
      finish();
    }
  }
}
...