Как добавить MediaController в список музыки с помощью MediaPlayer? - PullRequest
0 голосов
/ 22 мая 2018

Я новичок в разработке для Android.Я хочу создать музыкальный проигрыватель с музыкой из папки raw.Я создал ListView со списком музыки и установил MediaPlayer.Работает, музыка играет при нажатии на элемент ListView.Теперь я хочу добавить MediaController для управления воспроизведением этой музыки (пауза, воспроизведение следующего и предыдущего и т. Д.).Прочитайте много уроков по этой теме, включая https://code.tutsplus.com/tutorials/create-a-music-player-on-android-project-setup--mobile-22764?ec_unit=translation-info-language.Я написал код для добавления MediaController, но он не отображается на экране.Там нет никакой ошибки в Logcat.Вот MainActivity

public class MainActivity extends Activity implements MediaController.MediaPlayerControl{

ListView listSongs;
ArrayList<Song> arrayList;
ArrayAdapter<Song> mAdapter;
MediaPlayer mPlayer;
private MediaController controller;

@Override
protected void onCreate(Bundle saveInstanceState){
    super.onCreate(saveInstanceState);
    setContentView(R.layout.activity_music_category);
    listSongs = findViewById(R.id.list_songs);
    arrayList = new ArrayList<>();
    arrayList.add(new Song("Song1", R.raw.song1));
    arrayList.add(new Song("Song2", R.raw.song2));
    mAdapter = new ArrayAdapter<>(this, R.layout.text_view_forlist, arrayList);
    listSongs.setAdapter(mAdapter);
    mPlayer = new MediaPlayer();
    controller = new MediaController(this);
    controller.setMediaPlayer(this);
    listSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if(mPlayer != null){
                mPlayer.release(); 
            }
            mPlayer = MediaPlayer.create(MainActivity.this, arrayList.get(position).getmSongResourceId());
            mPlayer.start();
            controller.show(); 
        }
    });
}

@Override
public void start() {
    mPlayer.start();
}

@Override
public void pause() {
    mPlayer.pause();
}

@Override
public int getDuration() {
    return mPlayer.getDuration();
}

@Override
public int getCurrentPosition() {
    return mPlayer.getCurrentPosition();
}

@Override
public void seekTo(int pos) {
    mPlayer.seekTo(pos);
}

@Override
public boolean isPlaying() {
    return mPlayer.isPlaying();
}

@Override
public int getBufferPercentage() {
    return 0;
}

@Override
public boolean canPause() {
    return true;
}

@Override
public boolean canSeekBackward() {
    return true;
}

@Override
public boolean canSeekForward() {
    return true;
}

@Override
public int getAudioSessionId() {
    return 0;
}

@Override
protected void onStop() {
    super.onStop();
    controller.hide();
    mPlayer.stop();
    mPlayer.release();
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    //the MediaController will hide after 3 seconds - tap the screen to make it appear again
    controller.show();
    return true;
}
}

и activity_music_category.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"

<ListView
    android:id="@+id/list_songs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:listSelector="@android:color/transparent"
    android:padding="0dp"
    android:paddingEnd="10dp"
    android:paddingStart="10dp" >
</ListView>

Что нужно сделать для отображения MediaController внизу при нажатии на элемент ListView?Я думаю, что controller.show(); не в нужном месте, или я пропустил некоторые методы, или проблема более глобальная.Спасибо за любую помощь.

1 Ответ

0 голосов
/ 22 мая 2018

Вы не прикрепили MediaController!попробуйте это:

//you can use any view like ListView (I mean listSongs) in this case instead of mView
controller.setAnchorView(mView);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...