Es una buena práctica o necesaria para utilizar un servicio de utilizar un reproductor multimedia en el backgound

Auties01:

Hola usuarios de stackoverflow, estoy desarrollando una aplicación de reproductor de música para Android. En mi actividad principal cuando el usuario hace clic en una canción que comienzan un nuevo intento que muestra PlayerActivity. En allí, inicializar un MediaPlayer y todos los otros elementos de la interfaz. Cuando el usuario hace clic en el botón de retroceso, los saque a la actividad principal y la canción sigue jugando en el fondo. Lo mismo sucede si se aproximan a la aplicación. Ahora me pregunto si está bien hacer algo así o si debería comenzar un nuevo lugar de servicio para el MediaPlayer de la clase PlayerActivity en lugar de hacerlo en ese país.

PlayerActivity:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_player);

    Bundle extras = getIntent().getExtras();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));
        getWindow().setNavigationBarColor(getResources().getColor(R.color.colorPrimaryDark));
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        getWindow().setNavigationBarDividerColor(getResources().getColor(R.color.white));
    }

    playBtn = findViewById(R.id.btn_play);
    artImage = findViewById(R.id.art);
    remainingTimeLabel = findViewById(R.id.current_song_duration);
    totalTimeLabel = findViewById(R.id.total_duration);
    manager = MainActivity.getManager();

    Song song = manager.getCurrentSong();

    boolean wasCall = extras != null && extras.containsKey("call");
    if (!wasCall && manager.hasStarted()) {
        MediaPlayer mediaPlayer = manager.getMediaPlayer();
        mediaPlayer.pause();
        mediaPlayer.stop();
    }


    if (!wasCall) {
        mp = MediaPlayer.create(this, Uri.parse(song.getPath()));
        mp.setLooping(true);
        mp.seekTo(0);
        mp.setVolume(0.5f, 0.5f);
    } else {
        mp = manager.getMediaPlayer();
        mp.setLooping(true);
        mp.setVolume(0.5f, 0.5f);
    }

    totalTime = mp.getDuration();
    artImage.setImageBitmap(Bitmap.createScaledBitmap(song.getIcon(), 250, 250, true));

    totalTimeLabel.setText(createTimeLabel(totalTime));

    songName = findViewById(R.id.songName);
    songName.setText(song.getName());

    songAuthor = findViewById(R.id.songAuthor);
    songAuthor.setText(song.getArtist());

    Toolbar toolbar = findViewById(R.id.player_top_bar);
    toolbar.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
    setSupportActionBar(toolbar);

    assert getSupportActionBar() != null;
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    assert toolbar.getNavigationIcon() != null;
    toolbar.getNavigationIcon().setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);
    getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffffff'>MySound</font>"));

    positionBar =  findViewById(R.id.seek_song_progressbar);
    positionBar.setMax(totalTime);
    positionBar.setOnSeekBarChangeListener(
            new SeekBar.OnSeekBarChangeListener() {
                @Override
                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                    if (fromUser) {
                        mp.seekTo(progress);

                        positionBar.setProgress(progress);
                    }
                }

                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {

                }

                @Override
                public void onStopTrackingTouch(SeekBar seekBar) {

                }
            }
    );

    LinearLayout layout = findViewById(R.id.player_control);
    layout.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));

    new Thread(() -> {
        while (mp != null) {
            try {
                Message msg = new Message();
                msg.what = mp.getCurrentPosition();
                handler.sendMessage(msg);
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }).start();

    this.action = SongEndAction.REPEAT;

    mp.start();
    manager.setMediaPlayer(mp);
}
Marca JW:

Aquí es un servicio de música que he implementado en mi libro. https://github.com/Wickapps/Practical-Android-MusicService Esta aplicación incluye el juego, parada, y buscar hacia adelante, pero se puede añadir otras funciones. El servicio es la mejor arquitectura para una futura escalabilidad. Hay una MainActivity.java que se inicia el servicio. MusicService.java es la implementación del servicio. Espero que esto ayude.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=239345&siteId=1
Recomendado
Clasificación