栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

音乐播放器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

音乐播放器

音乐播放器
  • 一.需求:
  • 二. 权限:
  • 三.依赖:
  • 四.代码结构
  • 五.全部代码:
    • 1:引导页面功能
    • 2:主页面实现fragment切换

一.需求:

二. 权限:
  

    
    
    
    
    
    
    
    
    
    
    



    
        
            
                

                
            
        
        

        
        
        
    


三.依赖:
 implementation 'com.google.code.gson:gson:2.8.2'
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    implementation 'com.android.support:design:30.0.0'
四.代码结构

五.全部代码: 1:引导页面功能
  • 主页面:WelComeActivity.java
package com.bawei.yuekao;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.RadioGroup;

import com.bawei.yuekao.adapter.WelComeAdapter;
import com.bawei.yuekao.fragment.WelcomeFragmentOne;
import com.bawei.yuekao.fragment.WelcomeFragmentThree;
import com.bawei.yuekao.fragment.WelcomeFragmentTwo;
import com.bawei.yuekao.utils.SPUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

public class WelComeActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private List list;
    private WelComeAdapter welComeAdapter;
    private RadioGroup radioGroup;
    private Timer timer;
    private int position = 0;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if(msg.what == 102){
                viewPager.setCurrentItem(position++);
                if(position == 3){
                    timer.cancel();
                    Intent intent = new Intent(WelComeActivity.this,MainActivity.class);
                    startActivity(intent);
                    //sp记录
                    SPUtils.getInstance(WelComeActivity.this).putString("go","1");


                }
            }
        }
    };

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

        //sp获得值
        String go = SPUtils.getInstance(this).getString("go");
        if(!go.equals("")){
            Intent intent = new Intent(WelComeActivity.this,MainActivity.class);
            startActivity(intent);
            return;//!!!!!!!!结束
        }


        viewPager = findViewById(R.id.view_pager);
        radioGroup = findViewById(R.id.rg);
        list = new ArrayList<>();
        list.add(new WelcomeFragmentOne());
        list.add(new WelcomeFragmentTwo());
        list.add(new WelcomeFragmentThree());
        welComeAdapter = new WelComeAdapter(getSupportFragmentManager(),list);
        viewPager.setAdapter(welComeAdapter);

        //滑动viewpager
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                switch (position){
                    case 0:
                        radioGroup.check(R.id.rb1);
                        break;
                    case 1:
                        radioGroup.check(R.id.rb2);
                        break;
                    case 2:
                        radioGroup.check(R.id.rb3);
                        break;
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        //自动滑动
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(102);

            }
        },0,1000);

    }
}

  • 引导页第三个fragment:WelComeFragmentThree.java
package com.bawei.yuekao.fragment;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.bawei.yuekao.R;

import java.util.Timer;
import java.util.TimerTask;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;


public class WelcomeFragmentThree extends Fragment {
    private TextView textView;
    private Timer timer;
    private int position = 5;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if(msg.what == 101){
                textView.setText("倒计时"+position--);
                if(position == 0){
                    timer.cancel();
                }
            }
        }
    };


    public WelcomeFragmentThree() {

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_welcome_fragment_three, container, false);
        textView= view.findViewById(R.id.tv);
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(101);

            }
        },0,1000);
        return view;
    }

}


  • fragment适配器:WelComeAdapter.java
package com.bawei.yuekao.adapter;

import android.widget.ListView;

import java.util.List;

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;


public class WelComeAdapter extends FragmentPagerAdapter {
    private List list;

    public WelComeAdapter(FragmentManager fm, List list) {
        super(fm);
        this.list = list;
    }

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

    @Override
    public int getCount() {
        return list.size();
    }
}

  • SPUtils工具类:SpUtils.java
package com.bawei.yuekao.utils;

import android.content.Context;
import android.content.SharedPreferences;

public class SPUtils {
    private SharedPreferences sharedPreferences;
    private SharedPreferences.Editor editor;

    //单例模式:构造私有化+自行实例化+提供公开方法访问
    private SPUtils(Context context){
        sharedPreferences = context.getSharedPreferences("music",Context.MODE_PRIVATE);
        editor = sharedPreferences.edit();
    }
    private static SPUtils spUtils;
    public synchronized static SPUtils getInstance(Context context){
        if(spUtils == null){
            spUtils = new SPUtils(context);
        }
        return spUtils;
    }



    public void putString(String key,String value){
        editor.putString(key,value);
        editor.commit();

    }

    public String getString(String key){
        return sharedPreferences.getString(key, "");
    }


}

2:主页面实现fragment切换
  • Song实体类:Song.java
package com.bawei.yuekao.entity;

public class Song {
    private String name;//歌名
    private String singer;//歌手
    private String data;//音乐地址
    private String album;//专辑封面

    public Song(String name, String singer, String data, String album) {
        this.name = name;
        this.singer = singer;
        this.data = data;
        this.album = album;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSinger() {
        return singer;
    }

    public void setSinger(String singer) {
        this.singer = singer;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getAlbum() {
        return album;
    }

    public void setAlbum(String album) {
        this.album = album;
    }

    @Override
    public String toString() {
        return "SongBean{" +
                "name='" + name + ''' +
                ", singer='" + singer + ''' +
                ", data='" + data + ''' +
                ", album='" + album + ''' +
                '}';
    }

}

  • SongList实体类:SongList.java
package com.bawei.yuekao.entity;

import java.util.List;

public class SongList {

    

    private ResultBean result;
    private int code;

    public ResultBean getResult() {
        return result;
    }

    public void setResult(ResultBean result) {
        this.result = result;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public static class ResultBean {
        

        private boolean hasMore;
        private int songCount;
        private List songs;

        public boolean isHasMore() {
            return hasMore;
        }

        public void setHasMore(boolean hasMore) {
            this.hasMore = hasMore;
        }

        public int getSongCount() {
            return songCount;
        }

        public void setSongCount(int songCount) {
            this.songCount = songCount;
        }

        public List getSongs() {
            return songs;
        }

        public void setSongs(List songs) {
            this.songs = songs;
        }

        public static class SongsBean {
            

            private int id;
            private String name;
            private AlbumBean album;
            private int duration;
            private int copyrightId;
            private int status;
            private int rtype;
            private int ftype;
            private int mvid;
            private int fee;
            private Object rUrl;
            private int mark;
            private List artists;
            private List alias;
            private List transNames;

            public int getId() {
                return id;
            }

            public void setId(int id) {
                this.id = id;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }

            public AlbumBean getAlbum() {
                return album;
            }

            public void setAlbum(AlbumBean album) {
                this.album = album;
            }

            public int getDuration() {
                return duration;
            }

            public void setDuration(int duration) {
                this.duration = duration;
            }

            public int getCopyrightId() {
                return copyrightId;
            }

            public void setCopyrightId(int copyrightId) {
                this.copyrightId = copyrightId;
            }

            public int getStatus() {
                return status;
            }

            public void setStatus(int status) {
                this.status = status;
            }

            public int getRtype() {
                return rtype;
            }

            public void setRtype(int rtype) {
                this.rtype = rtype;
            }

            public int getFtype() {
                return ftype;
            }

            public void setFtype(int ftype) {
                this.ftype = ftype;
            }

            public int getMvid() {
                return mvid;
            }

            public void setMvid(int mvid) {
                this.mvid = mvid;
            }

            public int getFee() {
                return fee;
            }

            public void setFee(int fee) {
                this.fee = fee;
            }

            public Object getRUrl() {
                return rUrl;
            }

            public void setRUrl(Object rUrl) {
                this.rUrl = rUrl;
            }

            public int getMark() {
                return mark;
            }

            public void setMark(int mark) {
                this.mark = mark;
            }

            public List getArtists() {
                return artists;
            }

            public void setArtists(List artists) {
                this.artists = artists;
            }

            public List getAlias() {
                return alias;
            }

            public void setAlias(List alias) {
                this.alias = alias;
            }

            public List getTransNames() {
                return transNames;
            }

            public void setTransNames(List transNames) {
                this.transNames = transNames;
            }

            public static class AlbumBean {
                

                private int id;
                private String name;
                private ArtistBean artist;
                private long publishTime;
                private int size;
                private int copyrightId;
                private int status;
                private long picId;
                private int mark;
                private List alia;

                public int getId() {
                    return id;
                }

                public void setId(int id) {
                    this.id = id;
                }

                public String getName() {
                    return name;
                }

                public void setName(String name) {
                    this.name = name;
                }

                public ArtistBean getArtist() {
                    return artist;
                }

                public void setArtist(ArtistBean artist) {
                    this.artist = artist;
                }

                public long getPublishTime() {
                    return publishTime;
                }

                public void setPublishTime(long publishTime) {
                    this.publishTime = publishTime;
                }

                public int getSize() {
                    return size;
                }

                public void setSize(int size) {
                    this.size = size;
                }

                public int getCopyrightId() {
                    return copyrightId;
                }

                public void setCopyrightId(int copyrightId) {
                    this.copyrightId = copyrightId;
                }

                public int getStatus() {
                    return status;
                }

                public void setStatus(int status) {
                    this.status = status;
                }

                public long getPicId() {
                    return picId;
                }

                public void setPicId(long picId) {
                    this.picId = picId;
                }

                public int getMark() {
                    return mark;
                }

                public void setMark(int mark) {
                    this.mark = mark;
                }

                public List getAlia() {
                    return alia;
                }

                public void setAlia(List alia) {
                    this.alia = alia;
                }

                public static class ArtistBean {
                    

                    private int id;
                    private String name;
                    private Object picUrl;
                    private int albumSize;
                    private int picId;
                    private String img1v1Url;
                    private int img1v1;
                    private Object trans;
                    private List alias;

                    public int getId() {
                        return id;
                    }

                    public void setId(int id) {
                        this.id = id;
                    }

                    public String getName() {
                        return name;
                    }

                    public void setName(String name) {
                        this.name = name;
                    }

                    public Object getPicUrl() {
                        return picUrl;
                    }

                    public void setPicUrl(Object picUrl) {
                        this.picUrl = picUrl;
                    }

                    public int getAlbumSize() {
                        return albumSize;
                    }

                    public void setAlbumSize(int albumSize) {
                        this.albumSize = albumSize;
                    }

                    public int getPicId() {
                        return picId;
                    }

                    public void setPicId(int picId) {
                        this.picId = picId;
                    }

                    public String getImg1v1Url() {
                        return img1v1Url;
                    }

                    public void setImg1v1Url(String img1v1Url) {
                        this.img1v1Url = img1v1Url;
                    }

                    public int getImg1v1() {
                        return img1v1;
                    }

                    public void setImg1v1(int img1v1) {
                        this.img1v1 = img1v1;
                    }

                    public Object getTrans() {
                        return trans;
                    }

                    public void setTrans(Object trans) {
                        this.trans = trans;
                    }

                    public List getAlias() {
                        return alias;
                    }

                    public void setAlias(List alias) {
                        this.alias = alias;
                    }
                }
            }

            public static class ArtistsBean {
                

                private int id;
                private String name;
                private Object picUrl;
                private int albumSize;
                private int picId;
                private String img1v1Url;
                private int img1v1;
                private Object trans;
                private List alias;

                public int getId() {
                    return id;
                }

                public void setId(int id) {
                    this.id = id;
                }

                public String getName() {
                    return name;
                }

                public void setName(String name) {
                    this.name = name;
                }

                public Object getPicUrl() {
                    return picUrl;
                }

                public void setPicUrl(Object picUrl) {
                    this.picUrl = picUrl;
                }

                public int getAlbumSize() {
                    return albumSize;
                }

                public void setAlbumSize(int albumSize) {
                    this.albumSize = albumSize;
                }

                public int getPicId() {
                    return picId;
                }

                public void setPicId(int picId) {
                    this.picId = picId;
                }

                public String getImg1v1Url() {
                    return img1v1Url;
                }

                public void setImg1v1Url(String img1v1Url) {
                    this.img1v1Url = img1v1Url;
                }

                public int getImg1v1() {
                    return img1v1;
                }

                public void setImg1v1(int img1v1) {
                    this.img1v1 = img1v1;
                }

                public Object getTrans() {
                    return trans;
                }

                public void setTrans(Object trans) {
                    this.trans = trans;
                }

                public List getAlias() {
                    return alias;
                }

                public void setAlias(List alias) {
                    this.alias = alias;
                }
            }
        }
    }
}

  • NetSong实体类:NetSong.java
package com.bawei.yuekao.entity;

import java.util.List;

public class NetSong {

    

    private int code;
    private List data;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public List getData() {
        return data;
    }

    public void setData(List data) {
        this.data = data;
    }

    public static class DataBean {
        

        private int id;
        private String url;
        private int br;
        private int size;
        private String md5;
        private int code;
        private int expi;
        private String type;
        private int gain;
        private int fee;
        private Object uf;
        private int payed;
        private int flag;
        private boolean canExtend;
        private Object freeTrialInfo;
        private String level;
        private String encodeType;
        private FreeTrialPrivilegeBean freeTrialPrivilege;
        private FreeTimeTrialPrivilegeBean freeTimeTrialPrivilege;
        private int urlSource;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public int getBr() {
            return br;
        }

        public void setBr(int br) {
            this.br = br;
        }

        public int getSize() {
            return size;
        }

        public void setSize(int size) {
            this.size = size;
        }

        public String getMd5() {
            return md5;
        }

        public void setMd5(String md5) {
            this.md5 = md5;
        }

        public int getCode() {
            return code;
        }

        public void setCode(int code) {
            this.code = code;
        }

        public int getExpi() {
            return expi;
        }

        public void setExpi(int expi) {
            this.expi = expi;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public int getGain() {
            return gain;
        }

        public void setGain(int gain) {
            this.gain = gain;
        }

        public int getFee() {
            return fee;
        }

        public void setFee(int fee) {
            this.fee = fee;
        }

        public Object getUf() {
            return uf;
        }

        public void setUf(Object uf) {
            this.uf = uf;
        }

        public int getPayed() {
            return payed;
        }

        public void setPayed(int payed) {
            this.payed = payed;
        }

        public int getFlag() {
            return flag;
        }

        public void setFlag(int flag) {
            this.flag = flag;
        }

        public boolean isCanExtend() {
            return canExtend;
        }

        public void setCanExtend(boolean canExtend) {
            this.canExtend = canExtend;
        }

        public Object getFreeTrialInfo() {
            return freeTrialInfo;
        }

        public void setFreeTrialInfo(Object freeTrialInfo) {
            this.freeTrialInfo = freeTrialInfo;
        }

        public String getLevel() {
            return level;
        }

        public void setLevel(String level) {
            this.level = level;
        }

        public String getEncodeType() {
            return encodeType;
        }

        public void setEncodeType(String encodeType) {
            this.encodeType = encodeType;
        }

        public FreeTrialPrivilegeBean getFreeTrialPrivilege() {
            return freeTrialPrivilege;
        }

        public void setFreeTrialPrivilege(FreeTrialPrivilegeBean freeTrialPrivilege) {
            this.freeTrialPrivilege = freeTrialPrivilege;
        }

        public FreeTimeTrialPrivilegeBean getFreeTimeTrialPrivilege() {
            return freeTimeTrialPrivilege;
        }

        public void setFreeTimeTrialPrivilege(FreeTimeTrialPrivilegeBean freeTimeTrialPrivilege) {
            this.freeTimeTrialPrivilege = freeTimeTrialPrivilege;
        }

        public int getUrlSource() {
            return urlSource;
        }

        public void setUrlSource(int urlSource) {
            this.urlSource = urlSource;
        }

        public static class FreeTrialPrivilegeBean {
            

            private boolean resConsumable;
            private boolean userConsumable;

            public boolean isResConsumable() {
                return resConsumable;
            }

            public void setResConsumable(boolean resConsumable) {
                this.resConsumable = resConsumable;
            }

            public boolean isUserConsumable() {
                return userConsumable;
            }

            public void setUserConsumable(boolean userConsumable) {
                this.userConsumable = userConsumable;
            }
        }

        public static class FreeTimeTrialPrivilegeBean {
            

            private boolean resConsumable;
            private boolean userConsumable;
            private int type;
            private int remainTime;

            public boolean isResConsumable() {
                return resConsumable;
            }

            public void setResConsumable(boolean resConsumable) {
                this.resConsumable = resConsumable;
            }

            public boolean isUserConsumable() {
                return userConsumable;
            }

            public void setUserConsumable(boolean userConsumable) {
                this.userConsumable = userConsumable;
            }

            public int getType() {
                return type;
            }

            public void setType(int type) {
                this.type = type;
            }

            public int getRemainTime() {
                return remainTime;
            }

            public void setRemainTime(int remainTime) {
                this.remainTime = remainTime;
            }
        }
    }
}

  • 主页面实现fragment切换MainActivity.java
package com.bawei.yuekao;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;

import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.widget.Toast;

import com.bawei.yuekao.adapter.MainFragmentAdapter;
import com.bawei.yuekao.fragment.LocalMusicFragment;
import com.bawei.yuekao.fragment.LoveMusicFragment;
import com.bawei.yuekao.fragment.NetMusicFragment;
import com.bawei.yuekao.fragment.TuKuFragment;
import com.google.android.material.tabs.TabLayout;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends AppCompatActivity {
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private List list;
    private List title;
    private MainFragmentAdapter mainFragmentAdapter;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(new String[]{
                    "android.permission.INTERNET",
                    "android.permission.WRITE_EXTERNAL_STORAGE",
                    "android.permission.READ_EXTERNAL_STORAGE",
                    "android.permission.READ_CONTACTS",
                    "android.permission.READ_SMS",
                    "android.permission.CALL_PHONE",
                    "android.permission.READ_CALL_LOG",
                    "android.permission.WRITE_CALL_LOG",
                    "android.permission.ACCESS_NETWORK_STATE",
                    "android.permission.READ_PHONE_STATE"

            }, 101);

        }
    }
    //权限授予成功后加载布局

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode == 101 && grantResults != null){
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED ){//授予成功
                tabLayout = findViewById(R.id.tab);
                viewPager = findViewById(R.id.view_pager);
                list = new ArrayList<>();
                list.add(new LocalMusicFragment());
                list.add(new NetMusicFragment());
                list.add(new LoveMusicFragment());
                list.add(new TuKuFragment());
                title = new ArrayList<>();
                title.add("本地");
                title.add("网络");
                title.add("收藏");
                title.add("图库");
                mainFragmentAdapter = new MainFragmentAdapter(getSupportFragmentManager(), list, title);
                viewPager.setAdapter(mainFragmentAdapter);
                tabLayout.setupWithViewPager(viewPager);
            }else{
                Toast.makeText(this, "授予失败", Toast.LENGTH_SHORT).show();
            }

        }

    }
}

  • 本地音乐fragment:LocalMusicFragment.java
package com.bawei.yuekao.fragment;


import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;

import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import com.bawei.yuekao.R;
import com.bawei.yuekao.adapter.SongAdapter;
import com.bawei.yuekao.entity.Song;
import com.bawei.yuekao.service.MusicService;
import com.bawei.yuekao.sql.MusicHelper;
import com.bawei.yuekao.utils.SongsUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;

import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;


public class LocalMusicFragment extends Fragment {


    private TextView tv_curernt,tv_duration,tv_name;
    private TextView pop_tv_curernt,pop_tv_duration,pop_tv_name;
    private ImageView imageView,iv_pre,iv_play,iv_next,iv_mode;
    private ImageView pop_imageView,pop_iv_pre,pop_iv_play,pop_iv_next,pop_iv_mode,pop_iv_love,pop_fanhui;
    private SeekBar seekBar,pop_seekbar;
    private LinearLayout linearLayout;
    private MusicRecevicer musicRecevicer;

    private ListView listView;
    private SongAdapter songAdapter;
    private List list;
    private View view;

    private MusicService.MusicBinder musicBinder;
    private Timer timer;
    private ServiceConnection serviceConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            musicBinder = (MusicService.MusicBinder) service;
            //!!!!!!绑定成功后设置集合
            musicBinder.setList(list);
            //!!!!!绑定成功后开启定时器
            intiTimer();
            //!!!!!!!! 绑定成功后
            initRecevicer();
            //!!! 设置点击
            initLitener();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {

        }
    };



    public LocalMusicFragment() {

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_local_music, container, false);
        initView();
        initbind();
        return view;
    }
    //注册广播
    private void initRecevicer() {
        musicRecevicer = new MusicRecevicer();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.music.pre");
        intentFilter.addAction("com.music.start");
        intentFilter.addAction("com.music.pause");
        intentFilter.addAction("com.music.next");
        intentFilter.addAction("com.music.ui");
        intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);//来电监听
        intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);//网络状态监听
        getActivity().registerReceiver(musicRecevicer,intentFilter);
    }

    //定时器
    private void intiTimer() {
        timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                final int current = musicBinder.getCurrent();
                final int duration = musicBinder.getDuration();
                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        seekBar.setMax(duration);
                        seekBar.setProgress(current);
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("mm:ss");
                        tv_duration.setText(simpleDateFormat.format(duration));
                        tv_curernt.setText(simpleDateFormat.format(current));

                        if(pop_imageView != null){
                            pop_seekbar.setMax(duration);
                            pop_seekbar.setProgress(current);
                            pop_tv_duration.setText(simpleDateFormat.format(duration));
                            pop_tv_curernt.setText(simpleDateFormat.format(current));
                        }




                    }
                });
            }
        },0,100);

    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        if(timer != null){
            timer.cancel();
        }
        if(musicRecevicer != null){
            getActivity().unregisterReceiver(musicRecevicer);
        }


    }

    //设置监听
    private void initLitener() {
        iv_play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                musicBinder.pauseOrstart();
            }
        });

        iv_pre.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                musicBinder.pre();
            }
        });
        iv_next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                musicBinder.next();
            }
        });

        iv_mode.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //切换模式  自己完成
            }
        });

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                musicBinder.play(position);
            }
        });
        //拖拽
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if(fromUser){
                    musicBinder.seekTo(progress);
                }
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
        //弹窗
        linearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final PopupWindow popupWindow = new PopupWindow(getActivity());
                popupWindow.setHeight(RelativeLayout.LayoutParams.MATCH_PARENT);
                popupWindow.setWidth(RelativeLayout.LayoutParams.MATCH_PARENT);
                View view = LayoutInflater.from(getActivity()).inflate(R.layout.popup_window, null);
                pop_imageView = view.findViewById(R.id.pop_iv);
                Glide.with(getActivity())
                        .load(musicBinder.getAlbum())
                        .transform(new CircleCrop())
                        .into(pop_imageView);
                pop_iv_play = view.findViewById(R.id.pop_iv_pause);
                pop_iv_play.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        musicBinder.pauseOrstart();
                    }
                });
                pop_iv_pre = view.findViewById(R.id.pop_iv_pre);
                pop_iv_pre.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        musicBinder.pre();
                    }
                });
                pop_iv_next = view.findViewById(R.id.pop_iv_next);
                pop_iv_next.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        musicBinder.next();
                    }
                });
                pop_seekbar = view.findViewById(R.id.pop_sb);
                pop_tv_curernt = view.findViewById(R.id.pop_tv_current);
                pop_tv_duration = view.findViewById(R.id.pop_tv_duration);
                pop_tv_name = view.findViewById(R.id.pop_tv_name);
                pop_tv_name.setText(musicBinder.getName()+"");
                pop_iv_love = view.findViewById(R.id.pop_love);
                pop_iv_love.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //收藏存储数据
                        MusicHelper musicHelper = new MusicHelper(getActivity());
                        SQLiteDatabase database = musicHelper.getWritableDatabase();
                        ContentValues contentValues = new ContentValues();
                        contentValues.put("name",musicBinder.getName());
                        contentValues.put("singer",musicBinder.getsinger());
                        contentValues.put("data",musicBinder.getData());
                        contentValues.put("album",musicBinder.getAlbum());
                        database.insert("music",null,contentValues);
                        Toast.makeText(getActivity(), "收藏成功", Toast.LENGTH_SHORT).show();
                    }
                });
                pop_fanhui = view.findViewById(R.id.pop_fanhui);
                pop_fanhui.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        popupWindow.dismiss();
                    }
                });
                popupWindow.setContentView(view);
                popupWindow.showAtLocation(v, Gravity.BOTTOM,0,0);
            }
        });
    }

    //绑定服务
    private void initbind() {
        Intent intent = new Intent(getActivity(), MusicService.class);
        getActivity().bindService(intent,serviceConnection,Context.BIND_AUTO_CREATE);
    }
    //find控件
    private void initView() {
        linearLayout = view.findViewById(R.id.ll);
        seekBar = view.findViewById(R.id.bar);
        tv_curernt = view.findViewById(R.id.tv_current);
        tv_duration = view.findViewById(R.id.tv_duration);
        tv_name = view.findViewById(R.id.tv_name);
        iv_mode = view.findViewById(R.id.iv_mode);
        iv_pre = view.findViewById(R.id.iv_pre);
        iv_next = view.findViewById(R.id.iv_next);
        iv_play = view.findViewById(R.id.iv_play);
        imageView = view.findViewById(R.id.iv);
        listView = view.findViewById(R.id.lv);
        list = SongsUtils.getSongs(getContext());
        songAdapter = new SongAdapter(list, getContext());
        listView.setAdapter(songAdapter);

    }

    class MusicRecevicer extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            if("com.music.pre".equals(intent.getAction())){
                musicBinder.pre();

            }else if("com.music.start".equals(intent.getAction())){
                musicBinder.start();

            }else if("com.music.pause".equals(intent.getAction())){
                musicBinder.pause();
            }else if("com.music.next".equals(intent.getAction())){
                musicBinder.next();

            }else if("com.music.ui".equals(intent.getAction())){
                //更新图片和文字
                Glide.with(getActivity())
                        .load(musicBinder.getAlbum())
                        .transform(new CircleCrop())
                        .into(imageView);
                tv_name.setText(musicBinder.getName());

                if(pop_imageView != null){
                    Glide.with(getActivity())
                            .load(musicBinder.getAlbum())
                            .transform(new CircleCrop())
                            .into(pop_imageView);
                    pop_tv_name.setText(musicBinder.getName());
                }


            }else if(TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(intent.getAction())){//来电
                TelephonyManager telephonyManager = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
                telephonyManager.listen(new PhoneStateListener(){
                    @Override
                    public void onCallStateChanged(int state, String phoneNumber) {
                        super.onCallStateChanged(state, phoneNumber);
                        switch (state){
                            case TelephonyManager.CALL_STATE_RINGING://来电话
                                musicBinder.pause();
                                break;

                            case TelephonyManager.CALL_STATE_IDLE://挂断
                                musicBinder.start();
                                break;

                            case TelephonyManager.CALL_STATE_OFFHOOK://童话
                                musicBinder.pause();
                                break;

                        }
                    }
                },PhoneStateListener.LISTEN_CALL_STATE);

            }else if(ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())){//网络
                ConnectivityManager connectivityManager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
                if(activeNetworkInfo != null && activeNetworkInfo.isConnected()){//有网
                    musicBinder.start();
                }else{//无网
                    musicBinder.pause();
                }
            }
        }
    }


}

  • 网络音乐fragment:NetMusicFragment.java
package com.bawei.yuekao.fragment;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import com.bawei.yuekao.R;
import com.bawei.yuekao.adapter.SongAdapter;
import com.bawei.yuekao.entity.NetSong;
import com.bawei.yuekao.entity.Song;
import com.bawei.yuekao.entity.SongList;
import com.bawei.yuekao.service.DownloadService;
import com.google.gson.Gson;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;


public class NetMusicFragment extends Fragment {

//    根据歌手搜索歌曲名称
//    https://autumnfish.cn/search?keywords=邓紫棋
//
//    根据歌曲id获得歌曲地址
//    https://autumnfish.cn/song/url?id=36024806

    private String url_list = "https://autumnfish.cn/search?keywords=法老";
    private String url_song = "https://autumnfish.cn/song/url?id=";
    private ListView listView;
    private List list = new ArrayList<>();
    private SongAdapter songAdapter;
    private DownloadRecevier downloadRecevier;



    public NetMusicFragment() {

    }



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_net_music, container, false);
        listView = view.findViewById(R.id.lv);
        new MyTask().execute();
        //点击下载服务
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                initService(position);
            }
        });
        initRecevicer();
        return view;
    }
    //注册广播
    private void initRecevicer() {
        downloadRecevier = new DownloadRecevier();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("com.music.download");
        getActivity().registerReceiver(downloadRecevier,intentFilter);

    }
    //解除注册
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        getActivity().unregisterReceiver(downloadRecevier);
    }
    //启动服务
    private void initService(int position) {
        Intent intent = new Intent(getActivity(), DownloadService.class);
        Bundle bundle = new Bundle();
        bundle.putString("url",list.get(position).getData());
        bundle.putString("name",list.get(position).getName());
        intent.putExtras(bundle);
        getActivity().startService(intent);//不需要手动停止
    }

    class DownloadRecevier extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            if("com.music.download".equals(intent.getAction())){
                Toast.makeText(context, "下载完成", Toast.LENGTH_SHORT).show();
            }
        }
    }



    class MyTask extends AsyncTask{

        @Override
        protected String doInBackground(String... strings) {
            StringBuffer stringBuffer = new StringBuffer();
            try {
                {
                    URL url = new URL(url_list);
                    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                    httpURLConnection.connect();

                    InputStream inputStream = httpURLConnection.getInputStream();
                    byte[] bytes = new byte[1024];
                    int len = 0;
                    while ((len = inputStream.read(bytes)) != -1) {
                        stringBuffer.append(new String(bytes, 0, len));
                    }
                }
                SongList songList = new Gson().fromJson(stringBuffer.toString(), SongList.class);
                List songs = songList.getResult().getSongs();
                for (SongList.ResultBean.SongsBean song : songs) {
                    String name = song.getName();
                    String album = song.getArtists().get(0).getImg1v1Url();
                    int id = song.getId();
                    {
                        URL url = new URL(url_song+id);
                        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                        httpURLConnection.connect();
                        StringBuffer stringBuffer2 = new StringBuffer();
                        InputStream inputStream = httpURLConnection.getInputStream();
                        byte[] bytes = new byte[1024];
                        int len = 0;
                        while ((len = inputStream.read(bytes)) != -1) {
                            stringBuffer2.append(new String(bytes, 0, len));
                        }
                        NetSong netSong = new Gson().fromJson(stringBuffer2.toString(), NetSong.class);
                        String url1 = netSong.getData().get(0).getUrl();
                        list.add(new Song(name,"邓紫棋",url1,album));


                    }


                }


            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            songAdapter = new SongAdapter(list,getActivity());
            listView.setAdapter(songAdapter);
        }
    }


}

  • 收藏音乐fragment:LoveMusicFragment.java
package com.bawei.yuekao.fragment;


import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import com.bawei.yuekao.R;
import com.bawei.yuekao.adapter.SongAdapter;
import com.bawei.yuekao.entity.Song;
import com.bawei.yuekao.sql.MusicHelper;

import java.util.ArrayList;
import java.util.List;


public class LoveMusicFragment extends Fragment {
    private ListView listView;
    private List list = new ArrayList<>();
    private SongAdapter songAdapter;
    private MusicHelper musicHelper ;//!!!!!千万不要着么写 空指针
    private SQLiteDatabase sqLiteDatabase;


    public LoveMusicFragment() {

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_love_music, container, false);
        listView = view.findViewById(R.id.lv);
        musicHelper = new MusicHelper(getContext());
        sqLiteDatabase = musicHelper.getWritableDatabase();
        Cursor cursor = sqLiteDatabase.query("music", null, null, null, null, null, null);
        if(cursor != null){
            while (cursor.moveToNext()) {
                String name = cursor.getString(cursor.getColumnIndex("name"));
                String singer = cursor.getString(cursor.getColumnIndex("singer"));
                String data = cursor.getString(cursor.getColumnIndex("data"));
                String album = cursor.getString(cursor.getColumnIndex("album"));
                list.add(new Song(name,singer,data,album));
            }
        }
        songAdapter = new SongAdapter(list,getContext());
        listView.setAdapter(songAdapter);
        return view;
    }

}

  • 音乐服务:MusicService.java
package com.bawei.yuekao.service;

import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.os.Binder;
import android.os.IBinder;
import android.widget.RemoteViews;

import com.bawei.yuekao.R;
import com.bawei.yuekao.entity.Song;

import java.io.IOException;
import java.util.List;

import androidx.annotation.Nullable;

public class MusicService  extends Service {



    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return new MusicBinder();
    }
    public class MusicBinder extends Binder {
        public static final int MODE_ORDER = 0;//顺序
        public static final int MODE_RANDOM = 1;//随机
        public static final int MODE_DANQU = 2;//单曲
        private MediaPlayer mediaPlayer = new MediaPlayer();

        private List list;
        private int position;
        private int mode = MODE_ORDER;//播放模式

        //切歌
        public void play(int position){
            this.position = position;//更换下标
            if(mediaPlayer != null){
                mediaPlayer.reset();//!!!!!!!!重置资源
                try {
                    mediaPlayer.setDataSource(list.get(position).getData());
                    mediaPlayer.prepareAsync();
                    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {//!!!!!一定要准备完成
                        @Override
                        public void onPrepared(MediaPlayer mp) {
                            mediaPlayer.start();
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
                //!!!!发送通知 更新通知文字和图片
                showNotification();
                //更新播放栏+弹出窗体  发送广播
                Intent intent = new Intent();
                intent.setAction("com.music.ui");
                sendBroadcast(intent);





            }

        }

        public void setList(List list){
            this.list = list;

        }
        //播放
        public void start(){
            if(mediaPlayer != null){
                mediaPlayer.start();
            }
        }

        //暂停
        public void pause(){
            if(mediaPlayer != null){
                mediaPlayer.pause();
            }
        }
        //播放和暂停
        public void pauseOrstart(){
            if(mediaPlayer != null){
                if(mediaPlayer.isPlaying()){
                    mediaPlayer.pause();
                }else{
                    mediaPlayer.start();
                }
            }
        }

        //返回音乐总时长
        public int getDuration(){
            if(mediaPlayer != null){
                return mediaPlayer.getDuration();
            }
            return 0;
        }

        //返回音乐当前进度
        public int getCurrent(){
            if(mediaPlayer != null){
                return mediaPlayer.getCurrentPosition();
            }
            return 0;
        }
        //拖拽进度条
        public void seekTo(int time){
            if(mediaPlayer != null){
                mediaPlayer.seekTo(time);
            }
        }
        //下一首
        public void next(){
           if(mode == MODE_ORDER){//顺序
               if(position == list.size()-1){
                   position = 0;
               }else{
                   position++;
               }

           }else if(mode == MODE_RANDOM){//随机
              position = (int) (Math.random()*list.size());
           }
           play(position);
        }

        //上一首
        public void pre(){
            if(mode == MODE_ORDER){//顺序
                if(position == 0){
                    position = list.size()-1;
                }else{
                    position--;
                }

            }else if(mode == MODE_RANDOM){//随机
                position = (int) (Math.random()*list.size());
            }
            play(position);
        }
        //返回当前歌曲名称
        public String getName(){
            if(mediaPlayer != null){
                return  list.get(position).getName();
            }
            return "";
        }

        //返回当前歌曲图片
        public String getAlbum(){
            if(mediaPlayer != null){
                return  list.get(position).getAlbum();
            }
            return "";
        }

        //返回当前歌手
        public String getsinger(){
            if(mediaPlayer != null){
                return  list.get(position).getSinger();
            }
            return "";
        }

        //返回当前歌曲低至
        public String getData(){
            if(mediaPlayer != null){
                return  list.get(position).getData();
            }
            return "";
        }

        //切换播放模式
        public void changemode(int mode){
            this.mode = mode;
        }

        //显示通知
        public void showNotification(){
            Notification.Builder builder = new Notification.Builder(getApplicationContext());
            builder.setSmallIcon(R.mipmap.ic_launcher_round);
            //自定义布局
            RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.no);
            Bitmap bitmap = BitmapFactory.decodeFile(getAlbum());
            remoteViews.setImageViewBitmap(R.id.no_iv,bitmap);
            remoteViews.setTextViewText(R.id.no_tv_name,getName());
            //监听+广播

            {
                Intent intent = new Intent();
                intent.setAction("com.music.pre");
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 101, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                remoteViews.setOnClickPendingIntent(R.id.no_iv_pre, pendingIntent);
            }
            {
                Intent intent = new Intent();
                intent.setAction("com.music.start");
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 101, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                remoteViews.setOnClickPendingIntent(R.id.no_iv_start, pendingIntent);
            }
            {
                Intent intent = new Intent();
                intent.setAction("com.music.pause");
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 101, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                remoteViews.setOnClickPendingIntent(R.id.no_iv_pause, pendingIntent);
            }
            {
                Intent intent = new Intent();
                intent.setAction("com.music.next");
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 101, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                remoteViews.setOnClickPendingIntent(R.id.no_iv_next, pendingIntent);
            }
            builder.setCustomContentView(remoteViews);
            Notification notification = builder.build();

            startForeground(1,notification);
        }

    }
}

  • 下载服务:DownloadService.java
package com.bawei.yuekao.service;

import android.app.IntentService;
import android.content.Intent;
import android.os.Bundle;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import androidx.annotation.Nullable;

public class DownloadService  extends IntentService {

    public DownloadService() {
        super("DownloadService");
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        //获得值
        Bundle bundle = intent.getExtras();
        String url1 = bundle.getString("url");
        String name = bundle.getString("name");

        try {
            URL url = new URL(url1);
            HttpURLConnection  httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.connect();
            InputStream inputStream = httpURLConnection.getInputStream();
            byte[] bytes = new byte[1024];
            int len = 0;
            FileOutputStream fileOutputStream = new FileOutputStream("/sdcard/Music/" + name + ".mp3");
            while ((len = inputStream.read(bytes)) != -1) {
                fileOutputStream.write(bytes,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        //下载完成发送广播
        Intent intent1 = new Intent();
        intent1.setAction("com.music.download");
        sendBroadcast(intent1);



    }
}

  • 收藏:数据库表创建:MusicHelper.java
package com.bawei.yuekao.sql;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import androidx.annotation.Nullable;


public class MusicHelper extends SQLiteOpenHelper {

    public MusicHelper(@Nullable Context context) {
        super(context, "music.db", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table music(id integer primary key autoincrement,name varcha(30),singer varchar(30),data varchar(100),album varchar(100))");

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}
  • SongUtils:
package com.bawei.yuekao.utils;

import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;

import com.bawei.yuekao.entity.Song;

import java.util.ArrayList;
import java.util.List;

public class SongsUtils {
    //返回本地歌曲全部名称
    public static List getSongs(Context context){
        ArrayList songBeans = new ArrayList<>();
        ContentResolver contentResolver = context.getContentResolver();
        Cursor cursor = contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
        if(cursor != null ){
            while (cursor.moveToNext()){
                String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
                String singer = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                String album_id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
                //根据专辑id获得专辑封面
                Cursor query = contentResolver.query(Uri.parse("content://media/external/audio/albums/" + album_id), null, null, null, null);
                if(query != null){
                    while (query.moveToNext()){
                        String album = query.getString(query.getColumnIndex("album_art"));
                        songBeans.add(new Song(name,singer,data,album));
                    }
                    query.close();//关闭游标
                }

            }
            cursor.close();//关闭游标
        }
        return songBeans;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/270263.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号