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

第42篇 Android Studio实现音乐播放(四)读取手机存储的音乐

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

第42篇 Android Studio实现音乐播放(四)读取手机存储的音乐

第42篇 Android Studio实现音乐播放(四)读取手机存储的音乐
  • 7.读取
    • 7.1.AndroidManifest.xml添加权限
    • 7.2.安装之后手动设置权限
    • 7.3.歌曲信息类
    • 7.4.读取歌曲

7.读取

整个程序我觉得最大的坑就是在这里了,我找了很多文章,但是都是只给一半的,比如他说添加一些代码,又没有指明文件或者文件中哪个位置,所以就想自己写一篇,也许有用。

7.1.AndroidManifest.xml添加权限

添加的是这两句,就是给读写权限。

    
    

整体代码如下:




    
    

    
        
            
                

                
            
        
    


7.2.安装之后手动设置权限

注意,在虚拟机运行我不知道是什么情况,但是如果你在真机上运行,那么你注意,你安装完之后,并不是直接打开App的,而是停留在安装界面,要你设置权限,注意设置,不然,你打开App就会闪退,注意设置权限。

7.3.歌曲信息类

这个是网上弄的,感觉很全,很好,不过我自己没用到那么多信息,找不到链接了,真的很好。个人没有用到那么多,但是如果真的要弄一个播放器

package com.example.myapplication;

import androidx.annotation.NonNull;

public class Song {
    private String fileName;
    private String title;
    private int duration;
    private String singer;
    private String album;
    private String year;
    private String type;
    private String size;
    private String fileUrl;

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getDuration() {
        return duration;
    }

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

    public String getSinger() {
        return singer;
    }

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

    public String getAlbum() {
        return album;
    }

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

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }

    public String getType() {
        return type;
    }

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

    public String getSize() {
        return size;
    }

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

    public String getFileUrl() {
        return fileUrl;
    }

    public void setFileUrl(String fileUrl) {
        this.fileUrl = fileUrl;
    }

    public Song() {
        super();
    }

    public Song(String fileName, String title, int duration, String singer,
                String album, String year, String type, String size, String fileUrl) {
        super();
        this.fileName = fileName;
        this.title = title;
        this.duration = duration;
        this.singer = singer;
        this.album = album;
        this.year = year;
        this.type = type;
        this.size = size;
        this.fileUrl = fileUrl;
    }

    @NonNull
    @Override
    public String toString() {
        return "Song [fileName=" + fileName + ", title=" + title
                + ", duration=" + duration + ", singer=" + singer + ", album="
                + album + ", year=" + year + ", type=" + type + ", size="
                + size + ", fileUrl=" + fileUrl + "]";
    }
}

7.4.读取歌曲
public void getAllSongs(Context context) {
    Cursor cursor = context.getContentResolver().query(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,
            MediaStore.Audio.Media.IS_MUSIC,null, MediaStore.Audio.Media.IS_MUSIC);

    if (cursor != null) {
        Song song;
        while (cursor.moveToNext())
        {
            song = new Song();
            int i = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
            song.setTitle(cursor.getString(i));
            i = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST);
            song.setSinger(cursor.getString(i));
            i = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME);
            song.setFileName(cursor.getString(i));
            song.setFileUrl(cursor.getString(1));
            Log.d(song.getFileName(),"2");
            musics.add(song);
        }
        cursor.close();
    }
}

**(1)Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,
MediaStore.Audio.Media.IS_MUSIC,null, MediaStore.Audio.Media.IS_MUSIC);
**
详细解析

有五个参数,链接里的内容讲得挺好,我也是第一次用,所以也是不太懂,不过第一个应该就是 手机的路径吧,第二个是一个条件,我之前没加的时候把录音也一并读取的,加了就只能获取mp3文件了。

int i = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
song.setTitle(cursor.getString(i));

这个是获取歌曲名称的位置,然后以这个位置去获取数据,当然就是0,1,2,3,不过我还不知道哪些代表什么,只有一些比较明显的单词才能看得出来。
如果能够再次找到上面Song类是出自哪篇文章的话,就好了,就能更好的看出来了。
用的时候自己试试吧。

public void getAllSongs(Context context)

这里传入的参数是这样的

OK.。

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

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

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