Android 获取内部存储中音乐文件的正确姿势

这篇具有很好参考价值的文章主要介绍了Android 获取内部存储中音乐文件的正确姿势。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近想写一个音乐的小APP出来(doge),借此熟悉音频开发的相关技术。但是在获取内部存储的音乐文件时踩了一些坑...所以有了这篇帖子,简单介绍下Android的存储类别,以及如何获取内部存储中的音乐文件。

首先要理解一个概念,内存≠内部存储

内存 -> 程序运行是内存中进行的,并不是用于存储数据的。

百度百科描述如下:它用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。

二、内部存储是啥?

内部存储(InternalFileStorage)-> 内部存储是应用内部独有的存储,这部分存储的文件、数据,只能被应用自身访问到,其他应用都没有权限访问。

举个栗子,我下载了网易云音乐,网易云在手机存储中创建了个叫Cloudmusic的文件夹,网易云音乐的相关数据都在此文件夹下,其他应用都没得权限访问,仅仅自己进行访问。

(其实说到这里,我总能想起四大组件里面的Content Provider,懂我意思吧?使用内容提供者查询、访问其他应用程序的数据)

三、外部存储是啥?

外部存储(ExternalStorage)-> 在Android4.4以下系统,外部存储=插入手机内的SD卡(那个时候好像我还在玩天天酷跑??);在Android4.4系统及以上系统中,外部存储 = SD卡+机身存储中的外部存储。如下两图所示:

Android 获取内部存储中音乐文件的正确姿势
Android 获取内部存储中音乐文件的正确姿势

四、如何实现Android获取本地的音乐文件,以及我踩的坑。

Android 获取本地的音乐文件可以通过MediaStore的方式查询数据库得到歌曲信息。

相信大家对Android SQLite 都有所了解,我这就不过多赘述了。

Cursor cursor = null;
        try {
            cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                    null, null, null, null);
            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
                musicInfo = new MusicInfo();
                //中间muicInfo是我创建的音乐文件的Bean类,
                name = cursor.getString(cursor
                        .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                musicInfo.setName(name);
                time = cursor.getString(cursor
                        .getColumnIndex(MediaStore.Audio.Media.DURATION));
                musicInfo.setTime(time);
                position = cursor.getPosition();
                musicInfo.setPosition(String.valueOf(position));
                musicInfo.setPath((UtilsFileName.getMusicFilePath(name)));
                mDatas.add(musicInfo);
                ///storage/emulated/0/9.mp3 - >
            }
            adapter.setList(mDatas); //设置新的数据源
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }

//MediaStore.Audio.Media.EXTERNAL_CONTENT_URI 即获取内部存储中的音乐文件,如果有外部存储或者其他需求的可以更换调用的存储位置

仅是个人的一些分析和经验,希望能对有同样问题的朋友提供些许灵感,欢迎同好交流指正。

本文回头我传到公众号上(二两仙气儿),欢迎小白一起交流学习。文章来源地址https://www.toymoban.com/news/detail-481690.html

到了这里,关于Android 获取内部存储中音乐文件的正确姿势的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • android内部存储和外部存储

    我们在开发Android应用的过程中,避免不了要用到数据持久化技术,所谓的数据持久化就是将RAM中的瞬时数据保存到ROM中,保证在App退出或者手机关机后数据不会丢失。我们常用的数据持久化的方式有文件存储,数据库存储,SharedPreference存储等。在window中,当我们存储文件或

    2024年02月09日
    浏览(35)
  • Android外部存储与内部存储详解

    内部储存(内部存储的文件夹其他应用和用户无法直接访问,可以用于存放敏感数据。app进行数据清理或卸载可以清理外部存储和内部存储下的所有文件目录, 不需要读写权限 ) getFilesDir() /data/data/包名/files 或者 /data/user/0/包名/files getCacheDir() /data/data/包名/cache 或者 /data/u

    2024年04月09日
    浏览(51)
  • Android内部存储与外部存储(私有目录与公共目录)图文详解

        目录 一、存储空间概述 二、存储空间的划分 1、存储划分 2、内部存储 2.1 内部存储概述 2.2 内部存储 - 私有目录 3. 外部存储 3.1 外部存储概述 3.2 外部存储 - 私有目录 3.3 外部存储 - 公共目录 三、内部存储与外部存储比较 1、横向对比 2、目录结构 3、存储分类 四、总结

    2024年02月11日
    浏览(28)
  • android获取屏幕分辨率的正确方法;获取到分辨率(垂直方向像素)的不正确

    我通过下面的方法去获取屏幕分辨率的,但获取到的分辨率有时会不准确。原因是此方法有时候会忽略一些布局或控件的高度,从而得不到正确的高度。 而通过另外一个方法则没有上述那种问题,可以获取到正确的屏幕分辨率。

    2024年02月14日
    浏览(42)
  • Android 外部存储与内部存储详解,高级UI都没弄明白凭什么拿高薪

    FileOutputStream fos = new FileOutputStream(path, true); String str = infoEdt.getText().toString(); fos.write(str.getBytes()); } catch (IOException e) { e.printStackTrace(); } break; case R.id.read_btn: try { FileInputStream fis = new FileInputStream(path); byte[] b = new byte[1024]; int len = fis.read(b); String str2 = new String(b, 0, len); txt.setText(str

    2024年04月11日
    浏览(29)
  • Android 12.0 kenel中修改rom系统内部存储的大小

     在12.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部

    2024年02月13日
    浏览(30)
  • Kali字典正确使用姿势

    终端输入wordlists,可以查看自带字典。ls -al 查看具体路径 /usr/share/wordlists/目录下带了rockyou的字典。2009年一家名叫rockyou的公司遭到了黑客攻击,他们的密码列表以明文存储,黑客下载了所有的密码列表并且公开。rockyou.txt包含14341564个唯一密码,用于32603388个帐户。 rockyou.t

    2024年02月06日
    浏览(33)
  • 符号化的正确姿势

    将 .ips crash report 文件拖放到 Xcode Window Devices and Simulators View Device Logs 中, 然后导出 .crash 符号化文件. 使用条件: crash report 对应的 Archive 包是在本机构建的 symbolicatecrash 是一个 exec (可执行文件), Xcode自带, iOS 15 之前的系统产生的 crash report, 可以直接被整个符号化, 文件路径可以

    2024年02月13日
    浏览(57)
  • 开源语言大模型的正确姿势

    作者 | Nathan Lambert OneFlow编译 翻译|杨婷、宛子琳 如今,很多公司都被迫加快步伐,参与到开源语言大模型(LLM)的竞争之中。发布某种形式的开源语言大模型已成为机器学习公司实力的象征。最近,Mistral AI 完成资金筹集,发布了一款拥有 70 亿参数的强大语言模型。 尽管更

    2024年02月04日
    浏览(30)
  • 软路由的正确组网姿势(上篇)

    相信很多小伙伴儿已经在自己的设备上刷好了 OpenWrt 系统,成功拥有了人生第一台软路由。那么接下来就要考虑如何将它连接到自己的家庭网络中,也就是组网的问题。只有正确组网,它才能实现你期望的那些功能。 软路由可以作为主路由或旁路由使用 ,也就是对应两种不

    2024年02月04日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包