Android Studio-Musik-player-Liste Ansicht Wiedergabeliste

Ich entschuldige mich für die noobish Frage, aber ich bin Gebäude ein Musik-player in android-studio und ich habe Probleme, mich mit den songs zu spielen, eine nach der anderen wie eine Wiedergabeliste. Die Lieder können nur von hand geerntet und nach dem das Lied zu Ende ist, es bleibt einfach stehen, bis der Benutzer klickt auf ein anderes Lied. Ich habe geschrieben, zwei Stücke von code, ich vermute, dieses Problem zu lösen, aber ich bin mir nicht wirklich sicher, wie Sie Sie implementieren können, oder wenn Sie es irgendwann von nutzen sein wird überhaupt. Ich würde wirklich zu schätzen einige helfen mit dieser, könnte wirklich wirklich nutzen es. Irgendwelche Ratschläge oder Konstruktive Kritik ist immer willkommen, danke im Voraus. hier sind die snippets:

//------------> to get the next song <---------------
int itemsInList=list.getAdapter().getCount();
for(int i=1;i<itemsInList;i++){
    list.setSelection(i);
}
//--------------> to play the song on list item click <-------------------
@Override
protected void onListItemClick(ListView list, View view, int position,
long id) {
    super.onListItemClick(list, view, position, id);
    currentFile = (String) view.getTag();
    startPlay(currentFile);
}

Und nur für Referenz, hier ist meine Haupt-java-Datei:

public class MainActivity extends ListActivity {

private static final int UPDATE_FREQUENCY = 500;
private static final int STEP_VALUE = 4000;

private MediaCursorAdapter mediaAdapter = null;
private TextView selectedFile = null;
private SeekBar seekbar = null;
private MediaPlayer player = null;
private ListView list = null;
private ImageButton playButton = null;
private ImageButton prevButton = null;
private ImageButton nextButton = null;
private ImageButton btNext = null;
private ImageButton btPrev = null;

private boolean isStarted = true;
private String currentFile = "";
private boolean isMovingSeekBar = false;

private final Handler handler = new Handler();

private final Runnable updatePositionRunnable = new Runnable() {
    public void run() {
        updatePosition();
    }
};

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

    selectedFile = (TextView) findViewById(R.id.selectedfile);
    seekbar = (SeekBar) findViewById(R.id.seekbar);
    playButton = (ImageButton) findViewById(R.id.play);
    prevButton = (ImageButton) findViewById(R.id.prev);
    nextButton = (ImageButton) findViewById(R.id.next);
    btNext = (ImageButton) findViewById(R.id.btNxt);
    btPrev = (ImageButton) findViewById(R.id.btPrev);

    player = new MediaPlayer();

    player.setOnCompletionListener(onCompletion);
    player.setOnErrorListener(onError);
    seekbar.setOnSeekBarChangeListener(seekBarChanged);

    Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);

    if (null != cursor) {
        cursor.moveToFirst();

        mediaAdapter = new MediaCursorAdapter(this, R.layout.list_item, cursor);

        setListAdapter(mediaAdapter);

        playButton.setOnClickListener(onButtonClick);
        nextButton.setOnClickListener(onButtonClick);
        prevButton.setOnClickListener(onButtonClick);
        btNext.setOnClickListener(onButtonClick);
        btPrev.setOnClickListener(onButtonClick);

    }
}

//----------- ??? ----------------------------------------------------------------
int itemsInList=list.getAdapter().getCount();
for(int i=1;i<itemsInList;i++){
    list.setSelection(i);
}

@Override
protected void onListItemClick(ListView list, View view, int position, long id) {
    super.onListItemClick(list, view, position, id);
    currentFile = (String) view.getTag();
    startPlay(currentFile);
}
//--------------------------------------------------------------------------------

@Override
protected void onDestroy() {
    super.onDestroy();

    handler.removeCallbacks(updatePositionRunnable);
    player.stop();
    player.reset();
    player.release();

    player = null;
}

private void startPlay(String file) {
    Log.i("Selected: ", file);

    selectedFile.setText(file);
    seekbar.setProgress(0);

    player.stop();
    player.reset();

    try {
        player.setDataSource(file);
        player.prepare();
        player.start();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    seekbar.setMax(player.getDuration());
    playButton.setImageResource(android.R.drawable.ic_media_pause);

    updatePosition();

    isStarted = true;
}

private void stopPlay() {
    player.stop();
    player.reset();
    playButton.setImageResource(android.R.drawable.ic_media_play);
    handler.removeCallbacks(updatePositionRunnable);
    seekbar.setProgress(0);

    isStarted = false;
}

private void updatePosition() {
    handler.removeCallbacks(updatePositionRunnable);

    seekbar.setProgress(player.getCurrentPosition());

    handler.postDelayed(updatePositionRunnable, UPDATE_FREQUENCY);
}

private class MediaCursorAdapter extends SimpleCursorAdapter {

    public MediaCursorAdapter(Context context, int layout, Cursor c) {
        super(context, layout, c,
                new String[]{MediaStore.MediaColumns.DISPLAY_NAME, MediaStore.MediaColumns.TITLE, MediaStore.Audio.AudioColumns.DURATION},
                new int[]{R.id.displayname, R.id.title, R.id.duration});
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        TextView title = (TextView) view.findViewById(R.id.title);
        TextView name = (TextView) view.findViewById(R.id.displayname);
        TextView duration = (TextView) view.findViewById(R.id.duration);

        name.setText(cursor.getString(
                cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)));

        title.setText(cursor.getString(
                cursor.getColumnIndex(MediaStore.MediaColumns.TITLE)));

        long durationInMs = Long.parseLong(cursor.getString(
                cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DURATION)));

        double durationInMin = ((double) durationInMs / 1000.0) / 60.0;

        durationInMin = new BigDecimal(Double.toString(durationInMin)).setScale(2, BigDecimal.ROUND_UP).doubleValue();

        duration.setText("" + durationInMin);

        view.setTag(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA)));
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View v = inflater.inflate(R.layout.list_item, parent, false);

        bindView(v, context, cursor);

        return v;
    }
}

private View.OnClickListener onButtonClick = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.play: {
                if (player.isPlaying()) {
                    handler.removeCallbacks(updatePositionRunnable);
                    player.pause();
                    playButton.setImageResource(android.R.drawable.ic_media_play);
                } else {
                    if (isStarted) {
                        player.start();
                        playButton.setImageResource(android.R.drawable.ic_media_pause);

                        updatePosition();
                    } else {
                        startPlay(currentFile);
                    }
                }

                break;
            }
            case R.id.next: {
                int seekto = player.getCurrentPosition() + STEP_VALUE;

                if (seekto > player.getDuration())
                    seekto = player.getDuration();

                player.pause();
                player.seekTo(seekto);
                player.start();

                break;
            }
            case R.id.prev: {
                int seekto = player.getCurrentPosition() - STEP_VALUE;

                if (seekto < 0)
                    seekto = 0;

                player.pause();
                player.seekTo(seekto);
                player.start();

                break;
            }
            case R.id.btNxt: {
            //TO DO
            }
            case R.id.btPrev: {
            //TO DO
            }
        }
    }
};

private MediaPlayer.OnCompletionListener onCompletion = new MediaPlayer.OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
        stopPlay();
    }
};

private MediaPlayer.OnErrorListener onError = new MediaPlayer.OnErrorListener() {

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {

        return false;
    }
};

private SeekBar.OnSeekBarChangeListener seekBarChanged = new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        isMovingSeekBar = false;
    }

    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        isMovingSeekBar = true;
    }

    @Override
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
        if (isMovingSeekBar) {
            player.seekTo(progress);

            Log.i("OnSeekBarChangeListener", "onProgressChanged");
        }
    }
};

}

  • Sind Sie in der Lage, das Lied zu spielen, im service, wenn ja, wie ändern Sie die position ?
InformationsquelleAutor Konrad | 2016-07-08
Schreibe einen Kommentar