zoukankan      html  css  js  c++  java
  • 团队冲刺第五天

    今天继续昨天的内容,完成了音乐适配器的相关代码,增加了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
  • 相关阅读:
    LFI、RFI、PHP封装协议安全问题学习
    Django:(博客系统)添加文章(中文)出现UnicodeEncodeError乱码
    Django:(博客系统)使用使用mysql数据->后台管理tag/post/category的配置
    Spark:性能调优
    Django:(博客系统)使用使用mysql数据&创建post/category/tag实体,并同步到数据中
    C#:多进程开发,控制进程数量
    Django通过pycharm创建后,如何登录admin后台?
    扑克牌游戏研究先告一段落
    Zookeeper通过java创建、查看、修改、删除znode
    ZooKeeper:win7上安装单机及伪分布式安装
  • 原文地址:https://www.cnblogs.com/hhjing/p/12734919.html
Copyright © 2011-2022 走看看