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

        最近幾乎沒有什麽事情,繼續鼓搗我的小東西。想在項目中加入一個簡易的音樂播放器功能,就像華為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中!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
你可以使用Android自带的MediaStore类来扫描本地音乐文件。下面是一个简单的示例代码: ``` private void scanMusicFiles() { // 定义要查询的列 String[] projection = new String[]{ MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.DURATION, MediaStore.Audio.Media.SIZE }; // 定义查询条件,只查询音频文件 String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0"; // 查询音乐文件 Cursor cursor = getContentResolver().query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, selection, null, null ); // 遍历查询结果 if (cursor != null) { while (cursor.moveToNext()) { // 获取音乐文件的信息 long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID)); String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); 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 duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE)); // 打印音乐文件的信息 Log.d(TAG, "id: " + id); Log.d(TAG, "path: " + path); Log.d(TAG, "title: " + title); Log.d(TAG, "artist: " + artist); Log.d(TAG, "album: " + album); Log.d(TAG, "duration: " + duration); Log.d(TAG, "size: " + size); } cursor.close(); } } ``` 注意:需要在AndroidManifest.xml文件添加读取外部存储的权限: ``` <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值