当前位置:首页 > 开发 > 移动开发 > 正文

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

发表于: 2014-03-12   作者:小桔子   来源:转载   浏览:
摘要:         最近幾乎沒有什麽事情,繼續鼓搗我的小東西。想在項目中加入一個簡易的音樂播放器功能,就像華為p6桌面上那麼大小的音樂播放器。用過天天動聽或者QQ音樂播放器的人都知道,可已通過本地掃描添加歌曲。不知道他們是怎麼實現的,我覺得應該掃描設備上的所有文件,過濾出音頻文件,每個文件實例化為一個實體,記錄文件名、路徑、歌手、類型、大小等信息。具體算法思想,

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

 
package com.shark.act.util;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.shark.db.Song;

public class SongsFilter {
	
	public static List<Song> songLis=new ArrayList<Song>();
	public static void IterateFile(File file)
	{	
		if(file.listFiles()!=null)//文件目錄下掃描到的文件為空判斷
		{
			for( File filex : file.listFiles())
				{
				if(filex.isDirectory())
				{
				    IterateFile(filex);
				}
				else
				{
					String filename=filex.getName();
					System.out.println(filename);
					if(filename.endsWith(".mp3"))
					{
						Song mSong=new Song();
						mSong.setName(filename);
						mSong.setPath(file.getPath());	
						mSong.setType("mp3");
						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);
					}
				}				
				};		
	}
	}
	

}

 

 
實體類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音樂不是這麼整的?
之前写的,今天修改了一下文件遍历,之前没注意,文件目录下文件为空时会报错。顺带补充一下天天动听的扫描可能是手动扫描,因为我使用天天动听,我的手机SD卡坏了之后,以前存放的音频文件没了,但是在天天动听上面却依然还有索引,也就是说天天动听没有更新本地音乐库。播放自然会报错的!而QQ音乐应该直接使用的mediaStore这个类provider来抓数据的。自动检测本地SD卡,比如下载了一首歌曲就会存放在provider中!

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在Android中,例如图库和音乐播放器,它们能够扫描我们的系统,获取到本地的相片跟音乐,这一点是如
虽然Adobe已经宣称不再支持android下的flash播放了,但是在HTML5没有热火起来之前还是有许多地方需
本地文件就是指文件放在Android系统的外部存储设备(如:SD卡)和内部设备上的文件,SD卡比较方便,
本地文件就是指文件放在Android系统的外部存储设备(如:SD卡)和内部设备上的文件,SD卡比较方便,
package cn.iimob; import android.app.Activity; import android.graphics.EmbossMaskFilter; impo
网络文件就是指放在网络上的文件,也可能是流媒体等网络资源。由于这种方式不用存储比较方便,但它的
网络文件就是指放在网络上的文件,也可能是流媒体等网络资源。由于这种方式不用存储比较方便,但它
这个是从SCN上看到的,自己稍加修改,编制,做的还可以,可以播放视频,音频,唯一的不足就是不能控
使用AudioRecord&AudioTrack進行錄製音頻文件與播放操作 代碼稍微多了點,儘量一個章節寫完 首先看
wzplayer for android V1.5.3 新增功能 1.使用gl es2 播放 yuv 文件. 联系方式:weinyzhou86@gmail.c
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号