当前位置: 代码迷 >> Android >> android播发,掃描添加本地音頻文件
  详细解决方案

android播发,掃描添加本地音頻文件

热度:21   发布时间:2016-04-28 06:39:11.0
android播放,掃描添加本地音頻文件

? ? ? ? 最近幾乎沒有什麽事情,繼續鼓搗我的小東西。想在項目中加入一個簡易的音樂播放器功能,就像華為p6桌面上那麼大小的音樂播放器。用過天天動聽或者QQ音樂播放器的人都知道,可已通過本地掃描添加歌曲。不知道他們是怎麼實現的,我覺得應該掃描設備上的所有文件,過濾出音頻文件,每個文件實例化為一個實體,記錄文件名、路徑、歌手、類型、大小等信息。具體算法思想,寫一個遞歸調用的方法,使用file.listFile()獲取該文件夾下的目錄和文件,在逐一判斷,如果是目錄這遞歸,如果是文件,則使用file.getName()獲取文件名判斷是不是以.mp3 和.wmv等結尾,則保存信息。代碼如下:

?
package com.shark.demo.util;import java.io.File;import java.util.ArrayList;import java.util.List;   public class SongsFilter {		public static List<Song> songLis=new ArrayList<Song>();	//遍歷問文件	public static void IterateFile(File file)	{				for( File filex : file.listFiles())//返回該文件下的所有文件和目錄				{				System.out.println("1");				if(filex.isDirectory())  //如果是目錄,將目錄作為參數再次調用IterateFile方法				{				IterateFile(filex);   				System.out.println("2");				}				else				{                       					String filename=filex.getName();  //是文件,繼續判斷問價是不是音頻文件					System.out.println(filename);					if(filename.endsWith(".mp3"))					{						Song mSong=new Song();						mSong.setName(filename);						mSong.setPath(file.getPath());	 //將音頻文件信息存入實體,添加到songLis中						mSong.setType("mp3");						songLis.add(mSong);					songLis.add(mSong)	;					}					else if(filename.endsWith(".wmv"))					{Song mSong=new Song();						mSong.setName(filename);						mSong.setPath(file.getPath());							mSong.setType("mp3");						songLis.add(mSong);					songLis.add(mSong)	;					}					else if(filename.endsWith(".java"))					{Song mSong=new Song();						mSong.setName(filename);						mSong.setPath(file.getPath());						mSong.setType("java");						songLis.add(mSong);					}				}								};			}}
?
實體類Song:
測試:
File path=Environment.getExternalStorageDirectory();SongsFilter.IterateFile(path);for(Song song:SongsFilter.songLis){System.out.println("歌曲名稱:"+song.getName()+" 路徑:"+song.getPath()+" 類型"+song.getType());}
?
tips:如果傳入文件下的文件很多,掃描時間可能會很長,可以開個線程來執行掃描。
? ? ? ? 通過上面的方法掃描到了本地文件夾下的歌曲信息,接下來時持久化,不然每次開啟都要掃描一次的話用戶體驗性不好,可以將掃描到的歌曲信息存放在sqlite中,可以直接到數據庫中查找音頻信息。這裡有兩個問題
1.如果用戶在本地將音頻文件刪除,sqlite中還存在該信息。可能出現找不到文件異常
2.如果用戶在本地將添加了音頻文件,sqlite中還是沒有音頻數據。
以上說的情況是用戶刪除或者添加了文件而本應用卻不知道,所以不能及時的跟新數據庫,怎麼整?難道人家天天動聽、QQ音樂不是這麼整的?
  相关解决方案