文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android扫描本地音乐文件开发案例分享

2022-06-06 08:30

关注

一、前言

本来觉得so easy,真是没想到,还搞了老半天,搞的我大汗淋漓,要拍桌子摔键盘了。
本想实现的功能是:
通过网易云音乐/百度音乐/QQ音乐/酷狗音乐中一个API,通过关键词/歌手/歌词来搜索相关歌曲信息,然后在线播放、下载到本地,不过目前来看,使用API还是有一点问题。通过浏览器访问,问题不大,例如下图:

但是想通过手机访问的时候,问题就出现了,同样的参数,结果很不一样,而且基本搜不到自己想要的,后来换做通过自己的服务器去访问,还是搜不到,后来查了一下资料,暂时也没解决。于是,目前就只是通过扫描QQ音乐已经下载的歌曲,来实现播放功能。这篇博文里,我先记录下扫描音乐文件吧,至于播放和下载,后面如果自己整理好了,再贴出来。
关于网易云音乐/百度音乐/QQ音乐/酷狗音乐API的使用,有朋友如果知道适合Android的,请求推荐!

二、扫描本地音乐文件

首先通过QQ音乐已经下载好歌。
扫描实现:


//扫描本地音乐
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
  new Thread()
  {
    @Override
    public void run()
    {
      try
      {
      String[] ext = { ".mp3" };
      File file = new File(Environment.getExternalStorageDirectory()+"/Android/data/com.tencent.qqmusic/files/qqmusic/song");//可以把"//////"这一串都去掉,扫面范围是整个SD卡,我嫌慢,而且扫出来很多...不是我想要的歌曲,最后还是直接写成QQ音乐的下载目录了,其实自己的APP支持下载的话,可以把歌曲下载的指定目录,然后扫描这个指定目录就行了~全局扫描的确不太合适,又不是杀毒..
      localMusicList = Common.searchMp3Infos(file,ext);
      hander.sendEmptyMessage(SEARCH_MUSIC_SUCCESS);
      }catch (Exception e){}
      }
    }.start();
}

下面就是Common.searchMp3Infos()的代码


//扫描实现
  static List<String> list = new ArrayList<>();
  public static List<String> searchMp3Infos(File file, String[] ext) {
    if (file != null) {
      if (file.isDirectory()) {
        File[] listFile = file.listFiles();
        if (listFile != null) {
          for (int i = 0; i < listFile.length; i++) {
            searchMp3Infos(listFile[i], ext);
          }
        }
      } else {
        String filename = file.getAbsolutePath();
        for (int i = 0; i < ext.length; i++) {
          if (filename.endsWith(ext[i])) {
            list.add(filename);
            break;
          }
        }
      }
    }
    return list;
  }

然后在handler里通过适配器在listview中显示,效果就简单像这个样子,还是那句话,别嫌弃它丑:

嗯,先把它扫出来吧,显示问题再改~~~

另外一个方法,自己测试了一下暂时没扫出来,那就是从SQLite数据库扫音乐文件,很多朋友都提到了,但是不知道自己的问题出哪里了,只能扫到录音文件~我也贴出来,供参考。


public static List<HashMap<String, Object>> getMp3Infos(Context context)
  {
    Cursor cursor = context.getContentResolver().query(
        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,
        null, null, null);
    ArrayList mp3Infos = new ArrayList();
    for (int i = 0; i < cursor.getCount(); i++) {
      cursor.moveToNext();
      HashMap<String, Object> musicMap = new HashMap<>();
      long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));//音乐id
      String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));//音乐标题
      String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));//艺术家
      String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));//专辑
      long albumid = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));//专辑id
      long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));//时长
      long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));//文件大小
      String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));//文件路径
      int isMusic = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));//是否为音乐
      if (isMusic != 0) {
        musicMap.put("id",id);
        musicMap.put("title",title);
        musicMap.put("artist",artist);
        musicMap.put("album",album);
        musicMap.put("albumid",albumid);
        musicMap.put("duration",duration);
        musicMap.put("size",size);
        musicMap.put("url",url);
        musicMap.put("isMusic",isMusic);
        mp3Infos.add(musicMap);
      }
    }
    cursor.close();
    return mp3Infos;
  }
您可能感兴趣的文章:Android基于zxing的二维码(网格)扫描 仿支付宝网格扫描Android实现二维码扫描和生成的简单方法Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题Android基于google Zxing实现各类二维码扫描效果Android中加入名片扫描功能实例代码Android应用中使用ContentProvider扫描本地图片并显示Android平台生成二维码并实现扫描 & 识别功能Android波纹扩散效果之仿支付宝咻一咻功能实现波纹扩散特效Android app第三方支付宝支付接入教程Android实现支付宝AR扫描动画效果


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯