【问题标题】:Get path of song from SD card in android从Android中的SD卡获取歌曲路径
【发布时间】:2012-09-01 10:35:47
【问题描述】:

在我的 android 应用程序中,我想从 SD 卡中获取歌曲,但我无法获取该特定文件的路径。我使用的是不支持以下方法的 android api level 7。

Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_MUSIC);

我也尝试过以下代码:

path = Environment.getExternalStorageDirectory();

但我不知道如何指定音乐文件的路径。请提出一些解决方案。谢谢。

【问题讨论】:

  • 您的文件在 SDCard 上的什么位置?
  • 歌曲应该从 /sdcard 目录中的任何可用文件夹中获取。

标签: android media-player android-mediaplayer android-sdcard android-sdk-2.1


【解决方案1】:

从 SD 卡获取路径和歌曲名称。您可以从 MediaStore 中找到歌曲的路径。

媒体提供程序包含内部和外部存储设备上所有可用媒体的元数据。

private String[] STAR = { "*" };

public void ListAllSongs() 
    { 
        Cursor cursor;
        Uri allsongsuri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";

        if (isSdPresent()) {
            cursor = getContentResolver().query(allsongsuri, STAR, selection, null, null);

            if (cursor != null) {
                if (cursor.moveToFirst()) {
                    do {
                        String songname = cursor
                                .getString(cursor
                                        .getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                        int song_id = cursor.getInt(cursor
                                .getColumnIndex(MediaStore.Audio.Media._ID));

                        String fullpath = cursor.getString(cursor
                                .getColumnIndex(MediaStore.Audio.Media.DATA));

                        String albumname = cursor.getString(cursor
                                .getColumnIndex(MediaStore.Audio.Media.ALBUM));

                    } while (cursor.moveToNext());
                }
                cursor.close();
            }
        }
    }


public static boolean isSdPresent() 
{
    return android.os.Environment.getExternalStorageState().equals(
                android.os.Environment.MEDIA_MOUNTED);
}

【讨论】:

  • 我可以知道投反对票的原因吗?
  • 它从 sdcard 中检索歌曲...从任何文件夹
  • 什么是MusicUtils?只需从您的工作项目中复制和粘贴?
  • 顺便说一句,这是我在其中声明 isSdPresent() 函数的一类。
  • 如果您只发布用户期望的清晰和答案而不是完整的代码墙,我会更好。
【解决方案2】:

您可以扫描整个 sd 卡的任何文件格式,这里我用于 mp3 和 mp4。
您可以将其用于您需要的任何格式。

    /** To store the available media files */
    private List<String> mediaList = new ArrayList<String>();

    externalStoragePath = Environment.getExternalStorageDirectory()
                .getAbsolutePath();

        targetDir = new File(externalStoragePath);

        Log.d(" externalStoragePath ::: ", targetDir.getAbsolutePath());
public File[] mediaFiles = targetDir.listFiles();

/**
     * scanFiles
     * 
     * @param scanFiles
     */
    public void scanFiles(File[] scanFiles) {

        if (scanFiles != null) {
            for (File file : scanFiles) {

                if(mediaList.size() > 4){
                    return;
                }

                if (file.isDirectory()) {
                    // Log.d(" scaned File ::isDirectory: ",
                    // file.getAbsolutePath());
                    scanFiles(file.listFiles());

                } else {

                    addToMediaList(file);

                }

            }
        } else {

            Log.d(SCANNER,
                    " *************** No file  is available ***************");

        }
    }



/**
     * 
     * @param file
     */

    private void addToMediaList(File file) {

        if (file != null) {

            String path = file.getAbsolutePath();

            int index = path.lastIndexOf(".");

            String extn = path.substring(index + 1, path.length());

            if (extn.equalsIgnoreCase("mp4") || extn.equalsIgnoreCase("mp3")) {// ||

                Log.d(" scanned File ::: ", file.getAbsolutePath()
                        + "  file.getPath( )  " + file.getPath());// extn.equalsIgnoreCase("mp3"))
                                                                    // {
                Log.d(SCANNER, " ***** above file is added to list ");
                mediaList.add(path);


            }
        }

    }

【讨论】:

    猜你喜欢
    • 2012-04-30
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多