/** 查询本库在音乐媒体库中不存在的所有歌曲 */ private HashMap<String, Song> searchBySong(String filePaths) { HashMap<String, Song> map = new HashMap<String, Song>(); String[] projection = new String[] { MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.MIME_TYPE, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.SIZE }; Cursor cr = context .getContentResolver() .query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, null, null, MediaStore.Audio.Media._ID); Song song = null; while (cr.moveToNext()) { String filePath = cr.getString(cr.getColumnIndex(MediaStore.Audio.Media.DATA)).toLowerCase(); if (!filePaths.contains(filePath)) { song = new Song(); String album = cr.getString(cr.getColumnIndex(MediaStore.Audio.Media.ALBUM)); String artist = cr.getString(cr.getColumnIndex(MediaStore.Audio.Media.ARTIST)); // 未知专辑 if (TextUtils.isEmpty(album) || album.toLowerCase().equals("<unknown>")) { song.setAlbum(new Album(-1, "未知专辑", "")); } else { song.setAlbum(new Album(-1, album.trim(), "")); } // 未知歌手 if (TextUtils.isEmpty(artist) || artist.toLowerCase().equals("<unknown>")) { song.setArtist(new Artist(-1, "未知歌手", "")); } else { song.setArtist(new Artist(-1, artist.trim(), "")); } song.setDisplayName(cr.getString(cr.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME))); song.setDownFinish(false); song.setDurationTime(cr.getInt(cr.getColumnIndex(MediaStore.Audio.Media.DURATION))); song.setFilePath(filePath); song.setLike(false); song.setLyricPath(null); song.setMimeType(cr.getString(cr.getColumnIndex(MediaStore.Audio.Media.MIME_TYPE))); song.setName(cr.getString(cr.getColumnIndex(MediaStore.Audio.Media.TITLE))); song.setNet(false); song.setNetUrl(null); song.setPlayerList("$1$"); // 表示默认列表 song.setSize(cr.getInt(cr.getColumnIndex(MediaStore.Audio.Media.SIZE))); map.put(filePath, song); } } return map; }
/** 扫描歌曲 */ public void scanMusic(String rs, Handler handler) { List<String> list = new ArrayList<String>(); ScanMusicFilenameFilter filenameFilter = new ScanMusicFilenameFilter(); String[] filePaths = rs.split("\\$*\\$"); // 分隔出文件路径 for (int i = 0; i < filePaths.length; i++) { if (!filePaths[i].trim().equals("")) { File[] fs = new File(filePaths[i]).listFiles(filenameFilter); if (fs != null) { for (int j = 0; j < fs.length; j++) { list.add(fs[j].getPath().toLowerCase()); } } } } SongDao songDao = new SongDao(context); AlbumDao albumDao = new AlbumDao(context); ArtistDao artistDao = new ArtistDao(context); // 查询本库中的所有歌曲信息 String song_filePaths = songDao.getFilePathALL().toLowerCase(); // 查询本库在音乐媒体库中不存在的所有歌曲 HashMap<String, Song> map = searchBySong(song_filePaths); int count = 0; for (int i = 0, len = list.size(); i < len; i++) { String fp = list.get(i); // 判断歌曲是否在本库中 if (!song_filePaths.contains("$" + fp + "$")) { // 显示扫描信息 Message msg = handler.obtainMessage(); Bundle data = new Bundle(); data.putString("rs", fp); msg.what = 0; msg.setData(data); msg.sendToTarget(); Song song = map.get(fp); if (song != null) { // 处理专辑 Album album = song.getAlbum(); int albumId = albumDao.isExist(album.getName()); if (albumId == -1) { albumId = (int) albumDao.add(album); } album.setId(albumId); song.setAlbum(album); // 处理歌手 Artist artist = song.getArtist(); int artistId = artistDao.isExist(artist.getName()); if (artistId == -1) { artistId = (int) artistDao.add(artist); } artist.setId(artistId); song.setArtist(artist); } else { song = new Song(); int unalbum_id = albumDao.isExist("未知专辑"); if (unalbum_id == -1) { unalbum_id = (int) albumDao.add(new Album(0, "未知专辑", "")); } song.setAlbum(new Album(unalbum_id, "", "")); int unartist_id = artistDao.isExist("未知歌手"); if (unartist_id == -1) { unartist_id = (int) artistDao.add(new Artist(0, "未知歌手", "")); } song.setArtist(new Artist(unartist_id, "", "")); song.setDisplayName(Common.clearDirectory(fp)); song.setDownFinish(false); song.setDurationTime(-1); song.setFilePath(fp); song.setLike(false); song.setLyricPath(null); song.setMimeType(""); song.setName(""); song.setNet(false); song.setNetUrl(null); song.setPlayerList("$1$"); // 表示默认列表 song.setSize(-1); } if (songDao.add(song) > 0) count++; } } // 显示扫描信息 Message msg = handler.obtainMessage(); Bundle data = new Bundle(); data.putString("rs", "扫描完毕,共" + count + "首!"); msg.what = 1; msg.setData(data); msg.sendToTarget(); }