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

 更新时间:2016年05月24日 14:11:30   作者:不正经的小二哥  
这篇文章主要为大家分享了Android扫描本地音乐文件开发案例,感兴趣的小伙伴们可以参考一下

一、前言

本来觉得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软件编程有所帮助。

相关文章

  • Android实现Neumorphism UI控件

    Android实现Neumorphism UI控件

    大家好,本篇文章主要讲的是Android实现Neumorphism UI控件,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Android PicSelector图片选择器小功能

    Android PicSelector图片选择器小功能

    这篇文章主要为大家详细介绍了Android PicSelector图片选择器小功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Android Service中方法使用详细介绍

    Android Service中方法使用详细介绍

    这篇文章主要介绍了android service中方法使用详细介绍的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • Kotlin HttpURLConnection与服务器交互实现方法详解

    Kotlin HttpURLConnection与服务器交互实现方法详解

    简单来说,HttpURLConnection 是发起HTTP请求的基础类库,提供了HTTP请求的基本功能,不过封装的比较少,在使用时很多内容都需要自己设置,也需要自己处理请求流和响应流
    2022-09-09
  • Android Google AutoService框架使用详解

    Android Google AutoService框架使用详解

    AutoService是Google开发一个自动生成SPI清单文件的框架。看过一些基于APT的三方框架源码的读者应该有所了解。比如Arouter、EventBus等等
    2022-11-11
  • Android实现强制下线功能的示例代码

    Android实现强制下线功能的示例代码

    这篇文章主要介绍了Android实现强制下线功能的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Android ListView的OnItemClickListener详解

    Android ListView的OnItemClickListener详解

    这篇文章主要介绍了Android ListView的OnItemClickListener详解的相关资料,涉及到OnItemClickListener的position和id参数做详细的解释的知识点,非常不错,具有参考借鉴价值,需要的朋友参考下
    2016-07-07
  • Android kotlin 跳转手机热点开关页面和判断热点是否打开(亲测可用)

    Android kotlin 跳转手机热点开关页面和判断热点是否打开(亲测可用)

    跳转手机热点的页面肯定是用intent,重点是action不知道是什么,网上最常见的就是Settings.ACTION_WIFI_SETTINGS 跳转wifi设置页面,本文介绍Android kotlin 跳转手机热点开关页面和判断热点是否打开,感兴趣的朋友一起看看吧
    2023-08-08
  • Android中AlarmManager基本用法分析

    Android中AlarmManager基本用法分析

    这篇文章主要介绍了Android中AlarmManager基本用法,结合实例形式简单分析了AlarmManager的基本类型、方法及简单使用示例,需要的朋友可以参考下
    2016-08-08
  • Android自定义PasswordInputView密码输入

    Android自定义PasswordInputView密码输入

    这篇文章主要为大家详细介绍了Android自定义PasswordInputView密码输入功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08

最新评论