Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android从所有文件夹加载媒体_Java_Android_Android Mediaplayer - Fatal编程技术网

Java Android从所有文件夹加载媒体

Java Android从所有文件夹加载媒体,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,我刚学了几个月的Android编程。我试图创建一个简单的音乐播放器,但当我想打开所有mp3文件时遇到了问题,因为我只能打开一个特殊文件夹,例如“SD卡” 我从中找到此示例代码,仅用于从“SD卡”播放mp3文件 公共类歌曲管理器{ //SD卡路径 最终字符串媒体路径=新字符串(“/sdcard/”); private ArrayList songsList=new ArrayList(); //建造师 公共歌曲管理器(){ } /** *从SD卡读取所有mp3文件的功能 *并将详细信息存储在Arr

我刚学了几个月的Android编程。我试图创建一个简单的音乐播放器,但当我想打开所有mp3文件时遇到了问题,因为我只能打开一个特殊文件夹,例如“SD卡”

我从中找到此示例代码,仅用于从“SD卡”播放mp3文件

公共类歌曲管理器{
//SD卡路径
最终字符串媒体路径=新字符串(“/sdcard/”);
private ArrayList songsList=new ArrayList();
//建造师
公共歌曲管理器(){
}
/**
*从SD卡读取所有mp3文件的功能
*并将详细信息存储在ArrayList中
* */
公共阵列列表getPlayList(){
文件主目录=新文件(媒体路径);
if(home.listFiles(新文件扩展筛选器()).length>0){
对于(文件:home.listFiles(新的FileExtensionFilter())){
HashMap宋=新HashMap();
song.put(“songTitle”,file.getName().substring(0,(file.getName().length()-4));
put(“songPath”,file.getPath());
//将每首歌曲添加到歌曲列表
歌曲列表。添加(歌曲);
}
}
//返回歌曲列表数组
返回歌曲列表;
}
/**
*类来筛选扩展名为.mp3的文件
* */
类FileExtensionFilter实现FilenameFilter{
公共布尔接受(文件目录,字符串名称){
return(name.endsWith(“.mp3”)| name.endsWith(“.mp3”);
}
}
虽然我发现另一个代码可以通过递归从整个SD卡读取所有mp3文件,但我感到困惑,因为我不知道如何将函数调用到上面的代码中

代码如下:

    // this method creates a list of file extensions that will be searched
//
public static ArrayList<String> createAudioExtensionsList()
{
    ArrayList<String> extensions = new ArrayList<String>();

    extensions.add(".mp3");
    extensions.add(".ogg");
    extensions.add(".flac");
    extensions.add(".wav");
    extensions.add(".3gp");

    return extensions;
}

// simple method to get a file extension (does not work with complex extensions like .tar.gz)
//
public static String getFileExtension(String fileName)
{ 
    String result = fileName.substring(fileName.lastIndexOf(".")); 
    return result;
}

// recursively scans a folder for all files containing one of the file extensions
//
public static LinkedList<File> getFilesInFolder(File rootDir, ArrayList<String> extensions)
{
    LinkedList<File> results = new LinkedList<File>();
    File[] files = rootDir.listFiles();

    for(File file : files)
    {
        if(file.isDirectory())
            results.addAll(getFilesInFolder(file, extensions));
        else
        {
            for(String s : extensions)
            {
                String ext = getFileExtension(file.getName());
                if(s.equalsIgnoreCase(ext))
                    results.add(file);
            }
        }
    }   
    return results;
}
//此方法创建要搜索的文件扩展名列表
//
公共静态ArrayList CreateAudioExtensionList()
{
ArrayList extensions=新的ArrayList();
扩展。添加(“.mp3”);
增补(“.ogg”);
扩展。添加(“.flac”);
扩展。添加(“.wav”);
增补(“.3gp”);
返回扩展;
}
//获取文件扩展名的简单方法(不适用于复杂的扩展名,如.tar.gz)
//
公共静态字符串getFileExtension(字符串文件名)
{ 
字符串结果=fileName.substring(fileName.lastIndexOf(“.”);
返回结果;
}
//递归扫描文件夹,查找包含其中一个文件扩展名的所有文件
//
公共静态LinkedList GetFileInfolder(文件根目录,ArrayList扩展名)
{
LinkedList结果=新建LinkedList();
File[]files=rootDir.listFiles();
用于(文件:文件)
{
if(file.isDirectory())
addAll(getfileinfolder(文件,扩展名));
其他的
{
用于(字符串s:扩展名)
{
字符串ext=getFileExtension(file.getName());
如果(s.equalsIgnoreCase(ext))
结果.添加(文件);
}
}
}   
返回结果;
}

我相信getFileExtension将返回mp3歌曲的所有数据,但我不知道如何将其调用到主要功能中(File home=new File(MEDIA_PATH);)。我希望您能帮助或告诉我如何准确调用这些函数。非常感谢。

我很抱歉让您失望,但所有这些手动搜索文件的代码都已由自动完成。您所要做的就是查询内容提供商的音乐

保存对要查询的字段的引用

可能是这样的:

Cursor c = getContentResolver().query(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            new String[] { MediaStore.Audio.Media._ID,
                           MediaStore.Audio.Media.DATA,
                           MediaStore.Audio.Media.ARTIST,
                           MediaStore.Audio.Media.ALBUM,
                           MediaStore.Audio.Media.DISPLAY_NAME }, "1=1", null, null);

然后你有一个带有音乐id的光标,一个指向实际音乐的流,艺术家名称,专辑名称和显示名称,

我很抱歉让你失望,但是所有这些手动搜索文件的代码都是由用户自动完成的,你所要做的就是向内容提供商查询音乐

保存对要查询的字段的引用

可能是这样的:

Cursor c = getContentResolver().query(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
            new String[] { MediaStore.Audio.Media._ID,
                           MediaStore.Audio.Media.DATA,
                           MediaStore.Audio.Media.ARTIST,
                           MediaStore.Audio.Media.ALBUM,
                           MediaStore.Audio.Media.DISPLAY_NAME }, "1=1", null, null);

然后你有一个带有音乐id的光标,一个指向实际音乐的流,艺术家名称,专辑名称和显示名称,

来获取所有歌曲

    cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
    musicPath = new String[cursor.getCount()];
    musicTitle= new String[cursor.getCount()];
    count=cursor.getCount();
    cursor.moveToFirst();
    do{
        musicPath[cursor.getPosition()]=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
        musicTitle[cursor.getPosition()]=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));

    }while(cursor.moveToNext());

    arrayAdapter= new ArrayAdapter(this,R.layout.simple_list_item_1,musicTitle);
    MusicList.setAdapter(arrayAdapter);
    cursor.close();
执行musiclist onclick listner。在该侦听器中,您将获得单击歌曲的位置,因此通过intent将该歌曲的路径传递到下一个活动。并按如下方式播放

要播放歌曲,请从列表中选择歌曲,然后启动新活动并按如下方式播放

Mediaplayer mp =new MediaPlayer();
mp.setDataSoruce(getIntent().getStringExtra("Path","NULL"));
mp.prepare();
mp.start();

获取所有歌曲

    cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
    musicPath = new String[cursor.getCount()];
    musicTitle= new String[cursor.getCount()];
    count=cursor.getCount();
    cursor.moveToFirst();
    do{
        musicPath[cursor.getPosition()]=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
        musicTitle[cursor.getPosition()]=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));

    }while(cursor.moveToNext());

    arrayAdapter= new ArrayAdapter(this,R.layout.simple_list_item_1,musicTitle);
    MusicList.setAdapter(arrayAdapter);
    cursor.close();
执行musiclist onclick listner。在该侦听器中,您将获得单击歌曲的位置,因此通过intent将该歌曲的路径传递到下一个活动。并按如下方式播放

要播放歌曲,请从列表中选择歌曲,然后启动新活动并按如下方式播放

Mediaplayer mp =new MediaPlayer();
mp.setDataSoruce(getIntent().getStringExtra("Path","NULL"));
mp.prepare();
mp.start();

是否可能只捕获mp3文件的唯一路径?我知道对于照片,你可以,所以可能是的。但是你必须搜索一下MediaStore和内容提供商,才能找到原因,因为我记不住!是否可能只捕获mp3文件的唯一路径?我知道对于照片,你可以,所以可能是的。但是你必须搜索一下关于MediaStore和内容提供商,我无法找到原因,因为我记不得了!