首页 > 解决方案 > 媒体播放器安卓

问题描述

我正在努力设计一个小型音频播放器。

只是 4 首歌曲的列表 - 每首歌曲都有自己的 textView,当用户点击 textView 时,歌曲开始播放,但我不知道如何制作。我想为每个 textView 制作一个 onClick 方法,但真的不喜欢这个想法。

public class MainActivity extends AppCompatActivity {
    
    MediaPlayer varMediaPlayer;
    TextView song1 = (TextView) findViewById(R.id.song1);
    TextView song2 = (TextView) findViewById(R.id.song2);
    TextView song3 = (TextView) findViewById(R.id.song3);
    TextView song4 = (TextView) findViewById(R.id.song4);
   /* MediaPlayer hell = MediaPlayer.create(this, R.raw.Hell);
    MediaPlayer bells = MediaPlayer.create(this, R.raw.HellsBells);
    MediaPlayer shoot = MediaPlayer.create(this, R.raw.Shoot);
    MediaPlayer thunder = MediaPlayer.create(this, R.raw.Thunderstruck);*/

   public void playMusic (View view) {
       
       varMediaPlayer = MediaPlayer.create(this, R.raw.Hell);
       varMediaPlayer.start();


   }




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


    }
}

标签: javaandroidandroid-mediaplayer

解决方案


以下变量:

TextView song1 = (TextView) findViewById(R.id.song1);
TextView song2 = (TextView) findViewById(R.id.song2);
TextView song3 = (TextView) findViewById(R.id.song3);
TextView song4 = (TextView) findViewById(R.id.song4);

MainActivity在创建对象时分配变量会使您的应用程序崩溃。

将它们移动到其中onCreate(Bundle)并为每一个分配一个点击监听器TextViews

private static final int RAW_MUSIC_1 = R.raw.Hell;
private static final int RAW_MUSIC_2 = R.raw.HellsBells;
private static final int RAW_MUSIC_3 = R.raw.Shoot;
private static final int RAW_MUSIC_4 = R.raw.Thunderstruck;

private MediaPlayer varMediaPlayer;
private TextView song1, song2, song3, song4;

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

    // assign after setContentView(...) as findViewById scan the content view layout
    song1 = (TextView) findViewById(R.id.song1);
    song2 = (TextView) findViewById(R.id.song2);
    song3 = (TextView) findViewById(R.id.song3);
    song4 = (TextView) findViewById(R.id.song4);

    // add click listeners
    song1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View view) {
            playMusic(RAW_MUSIC_1);
        }
    };
    song2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View view) {
            playMusic(RAW_MUSIC_2);
        }
    };
    song3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View view) {
            playMusic(RAW_MUSIC_3);
        }
    };
    song4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View view) {
            playMusic(RAW_MUSIC_4);
        }
    };
}

并将playMusic(View)方法更改为playMusic(int)和添加release以及reset从内存中释放对象的方法

private void playMusic(final int musicId) {
    try {
        if (mediaPlayer.isPlaying()) mediaPlayer.reset();
    } catch (final Exception e) {}
    try {
        mediaPlayer.release();
    } catch (final Exception e) {}

    mediaPlayer = MediaPlayer.create(this, id);
    mediaPlayer.start();
}

推荐阅读