如何从原始文件夹到自定义数组列表视图获取所有.mp3文件并播放该歌曲?

时间:2016-12-17 05:46:37

标签: android android-arrayadapter audio-player android-music-player

我正在开发一个可以播放.mp3文件的应用程序。所以,在这个应用程序中,我创建了一个自定义列表视图适配器,用于将.mp3文件从raw文件夹填充到listview并创建了一个模型类,并且在我的原始文件夹中,我有20 .mp3 files.So,我想将所有原始文件夹.mp3文件添加到每行中的listview。之后当用户点击那个特定的listview项目时播放该歌曲给定的位置。

注意:我没有从SDCARD导入.mp3文件。

这是我的适配器

INT_MIN

这是我的模特课

int valueOf(t_node *node, int n, int *result) {
    int current = 0;

    while (current < n && node != NULL) {
        node = node->next;
        current += 1;
    }

    if (node == NULL) {
        // no such node -- return a failure code
        return 0;
    } else {
        // current == n
        *result = node->value;
        return 1;
    }
}

这是我的MainActivity

public class RingtoneAdapter extends ArrayAdapter<RingtoneModel> {

private List<RingtoneModel> planetList;
private Context context;


public RingtoneAdapter(List<RingtoneModel> planetList, Context ctx) {
    super(ctx, R.layout.ringtone_row_layout, planetList);
    this.planetList = planetList;
    this.context = ctx;
}

public int getCount() {
    return planetList.size();
}

public RingtoneModel getItem(int position) {
    return planetList.get(position);
}

public long getItemId(int position) {
    return planetList.get(position).hashCode();
}

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    PlanetHolder holder = new PlanetHolder();


    if (convertView == null) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.ringtone_row_layout, null);

        TextView tv = (TextView) v.findViewById(R.id.name);

        holder.planetNameView = tv;

        v.setTag(holder);
    }
    else 
        holder = (PlanetHolder) v.getTag();

    RingtoneModel p = planetList.get(position);
    holder.planetNameView.setText(p.getName());


    return v;
}


private static class PlanetHolder {
    public TextView planetNameView;
}


}

所以,如果有人知道我怎么能做到这一切,请帮助我......

1 个答案:

答案 0 :(得分:1)

当用户单击ListView中的按钮时,首先在ListView中获取项目索引。

    View parentRow = (View) v.getParent();
    ListView listView = (ListView) parentRow.getParent();
    final int position = listView.getPositionForView(parentRow);

获得确切的位置索引后,找到英文单词audio file并为该音频文件创建一个URI。

Uri mp3 = Uri.parse("android.resource://"
          + context.getPackageName() + "/raw/"
          + datas.get(position).word);

获得音频文件URI后,您可以实例化MediaPlayer类并在Android中播放音频文件。

    mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.setDataSource(context, mp3);
    mediaPlayer.prepare(); // might take long! (for buffering, etc)
    mediaPlayer.start();
    mediaPlayer.setOnCompletionListener(onCompletionListener);

当音乐停止时,立即释放MediaPlayer实例,这样它就不会消耗大量资源。

 private OnCompletionListener onCompletionListener = new OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        mediaPlayer.release();
        mediaPlayer = null;
    }
};