如何使用managedQuery()从android中的特定文件夹中获取所有音频文件。表示在managedQuery()中应该使用where子句来过滤Cursor结果。
代码是:
String[] proj = { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DURATION };
Cursor cursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,proj, /*where clause here*/, null, null);
答案 0 :(得分:4)
IS_MUSIC!= 0 AND DATA LIKE'/ dir /%':
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0 AND " +
MediaStore.Audio.Media.DATA + " LIKE '/mnt/sdcard/Music/SomeArtist/%'";
这会将您的managedQuery结果限制为... / SomeArtist / dir。
答案 1 :(得分:2)
我希望您检查文件的扩展名,以检查它是否是上述代码中的媒体文件
public class ReadAllFilesFromPathActivity extends Activity {
private List<String> myList;
File file;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView listView = (ListView) findViewById(R.id.mylist);
myList = new ArrayList<String>();
File directory = Environment.getExternalStorageDirectory();
file = new File( directory + "/Test" );
File list[] = file.listFiles();
for( int i=0; i< list.length; i++)
{
if(checkFileExtension( list[i].getName() )
{
myList.add( list[i].getName() );
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, myList);
listView.setAdapter(adapter); //Set all the file in the list.
}
}
并添加以下方法来检查扩展名。扩展名已添加到枚举
中private boolean checkExtension( String fileName ) {
String ext = getFileExtension(fileName);
if ( ext == null) return false;
try {
if ( SupportedFileFormat.valueOf(ext.toUpperCase()) != null ) {
return true;
}
} catch(IllegalArgumentException e) {
return false;
}
return false;
}
public String getFileExtension( String fileName ) {
int i = fileName.lastIndexOf('.');
if (i > 0) {
return fileName.substring(i+1);
} else
return null;
}
和受支持扩展程序的枚举(您也可以添加自己的扩展程序)
public enum SupportedFileFormat
{
_3GP("3gp"),
MP4("mp4"),
M4A("m4a"),
AAC("aac"),
TS("ts"),
FLAC("flac"),
MP3("mp3"),
MID("mid"),
XMF("xmf"),
MXMF("mxmf"),
RTTTL("rtttl"),
RTX("rtx"),
OTA("ota"),
IMY("imy"),
OGG("ogg"),
MKV("mkv"),
WAV("wav");
private String filesuffix;
SupportedFileFormat( String filesuffix ) {
this.filesuffix = filesuffix;
}
public String getFilesuffix() {
return filesuffix;
}
}
这是一些代码,但可以帮助你
答案 2 :(得分:0)
这是我的代码,正在使用我的特定目录路径
我做了一个光标,并借助它找到了目录中的所有歌曲。
DOWNLOAD_FILE_DIR拥有我目录的路径
String DOWNLOAD_FILE_DIR = public static final String DOWNLOAD_FILE_DIR = Environment.getExternalStorageDirectory().getPath() + "/MYDIR";
这是查找该目录中歌曲的查询。
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0 AND " +
MediaStore.Audio.Media.DATA + " LIKE '"+DOWNLOAD_FILE_DIR+"/%'"
这将返回一个游标。
context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null, selection, null, null);