团队冲刺第五天

今天继续昨天的内容,完成了音乐适配器的相关代码,增加了SD卡音乐信息的读取的学习和代码书写,并完成了手机SD本地音乐信息的导入。明天继续音乐的播放设置。

其中遇到了很多的问题,这里说一个最主要的问题(大佬帮助),在读取SD卡信息的时候出现了权限的问题,及时在manifest中增加了足够的权限,但是要把build.gradle改一下版本,我的从29改成了22,就可以了

package com.example.keeprunning6;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;

public class LocalMusicAdapter extends BaseAdapter {

    private Context context;
    private LayoutInflater inflater;
    private ArrayList<LocalMusicBean>list;

    public LocalMusicAdapter(Context context,ArrayList<LocalMusicBean>list){
        this.context=context;
        this.list=list;
        this.inflater=LayoutInflater.from(context);
    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    static class ViewHolder{
        public TextView music_num,music_song,music_singer,music_album,music_durtion;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder = null;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_local_music, null);
            viewHolder = new ViewHolder();
            viewHolder.music_num = convertView.findViewById(R.id.item_local_music_num);
            viewHolder.music_song=convertView.findViewById(R.id.item_local_music_song);
            viewHolder.music_singer=convertView.findViewById(R.id.item_local_music_singer);
            viewHolder.music_album=convertView.findViewById(R.id.item_local_music_album);
            viewHolder.music_durtion=convertView.findViewById(R.id.item_local_music_durtion);
            convertView.setTag(viewHolder);
        }else{
            viewHolder=(ViewHolder)convertView.getTag();
        }
        LocalMusicBean bean=list.get(position);
        viewHolder.music_num.setText((position+1)+"");
        viewHolder.music_song.setText(bean.getSong());
        viewHolder.music_singer.setText(bean.getSinger());
        viewHolder.music_album.setText(bean.getAlbum());
        viewHolder.music_durtion.setText(bean.getDuration());
        return convertView;
    }
}
View Code
package com.example.keeprunning6;

import android.Manifest;
import android.content.ContentResolver;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class MainActivity extends AppCompatActivity {

    //音乐列表试图
    private ListView listView;
    //音乐列表
    private ArrayList<LocalMusicBean> list=new ArrayList<>();
    //当前播放的音乐以及歌手
    private TextView now_music_song,now_music_singer,now_music_duration,now_music_ablum;

    private LocalMusicAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView=findViewById(R.id.music_list);
        now_music_song=findViewById(R.id.local_music_botton_tv_song);
        now_music_singer=findViewById(R.id.item_local_music_singer);

        //自定义数据

        adapter=new LocalMusicAdapter(MainActivity.this,list);
        listView.setAdapter(adapter);

        //加载本地数据源
        localMusicData();

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //上面的position参数是歌曲在列表中的索引

                //播放选中的音乐

                //切换下方当前音乐信息
                now_music_song.setText(list.get(position).getSong());
                now_music_singer.setText(list.get(position).getSinger());

            }
        });

    }

    private void localMusicData(){
        //加载本地存储当中的音乐mp3文件到集合当中

        //1.获取ContentResolver对象
        ContentResolver resolver=getContentResolver();
        //2.获取本地音乐存储的Uri地址
        Uri uri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        //3.开始查询地址
        Cursor cursor=resolver.query(uri,null,null,null,null);
        //4.遍历Cursor
        int id=0;
        while(cursor.moveToNext()){
            String song=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
            String singer=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
            String album=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
            id++;
            //歌曲编号变成String类型
            String sid=String.valueOf(id);
            String path=cursor.getString(cursor.getColumnIndex((MediaStore.Audio.Media.DATA)));
           // String duration=cursor.getString(cursor.getColumnIndex((MediaStore.Audio.Media.DURATION)));
           int duration=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
            SimpleDateFormat sdf=new SimpleDateFormat("mm:ss");
            String time = formatTime(duration);

            //将一行当中的数据封装到对象当中
            LocalMusicBean bean=new LocalMusicBean(sid,song,singer,album,time,path);
            list.add(bean);

        }
        //数据变化,提示适配器更新
        adapter.notifyDataSetChanged();

    }

    //    转换歌曲时间的格式
    public static String formatTime(int time) {
        if (time / 1000 % 60 < 10) {
            String tt = time / 1000 / 60 + ":0" + time / 1000 % 60;
            return tt;
        } else {
            String tt = time / 1000 / 60 + ":" + time / 1000 % 60;
            return tt;
        }
    }


}
View Code
原文地址:https://www.cnblogs.com/hhjing/p/12734919.html