首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从MediaStore.File和MediaStore.File.FileColumn获取数据

如何从MediaStore.File和MediaStore.File.FileColumn获取数据
EN

Stack Overflow用户
提问于 2016-09-06 17:00:25
回答 2查看 12.4K关注 0票数 6

我正在尝试获取包含音频文件的所有文件名,我使用Mediastore获得了纵隔音频、专辑、播放列表和音频数据,但是如何获得包含音频文件.Here的文件或文件夹标题是我尝试过的代码,但它是不正确的,因为我无法设置External_Content_uri。这是我试过的密码。

代码语言:javascript
复制
  private void External() {
    try {
        String[] proj = {MediaStore.Files.FileColumns.TITLE,
                MediaStore.Files.FileColumns._ID,
                MediaStore.Files.FileColumns.PARENT,
                MediaStore.Files.FileColumns.DATA
        };// Can include more data for more details and check it.

        String selection =MediaStore.Files.FileColumns.MEDIA_TYPE+"=?";

        String[] selectionArgs = {"MediaStore.Files.FileColumns.MEDIA_TYPE_AUDIO"};

        String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";

        Cursor audioCursor = getContentResolver().query(MediaStore.Files.getContentUri("\"external\""), proj, selection, selectionArgs, sortOrder);

        if (audioCursor != null) {
            if (audioCursor.moveToFirst()) {
                do {
                    int filetitle = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.TITLE);
                    int file_id = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID);
                    int fileparent = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.PARENT);
                    int filedata = audioCursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA);
                    Mediafileinfo info = new Mediafileinfo();
                    info.setData(new File(new File(audioCursor.getString(filedata)).getParent()).getName());
                    info.setTitle(audioCursor.getString(filetitle));
                    info.set_id(audioCursor.getString(file_id));
                    info.setParent(audioCursor.getString(fileparent));
                   // info.setData(audioCursor.getString(filedata));
                    audioList.add(info);
                } while (audioCursor.moveToNext());
            }
        }
        assert audioCursor != null;
        audioCursor.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我尝试了示例,但是我无法得到解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-25 08:12:56

写一个新的答案,因为你想要的只是音频文件的文件夹名。

所以这里使用的最好的东西是MediaStore.Audio.Media,而不是MediaStore.File。使用音频文件路径上的以下内容获取文件夹名。

代码语言:javascript
复制
new File(new File(audioCursor.getString(filedata)).getParent()).getName()
代码语言:javascript
复制
private void External() {
try {
    Uri externalUri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

    projection=new String[]{MediaStore.Audio.Media._ID,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.DATA,;

    String selection =null;

    String[] selectionArgs = null;

    String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";

    Cursor audioCursor = getContentResolver().query(externalUri, proj, selection, selectionArgs, sortOrder);

    if (audioCursor != null) {
        if (audioCursor.moveToFirst()) {
            do {
                int filetitle = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE);
                int file_id = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID);
                int filePath = audioCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
                Mediafileinfo info = new Mediafileinfo();
                info.setData(new File(new File(audioCursor.getString(filedata)).getParent()).getName());
                info.setTitle(audioCursor.getString(filetitle));
                info.set_id(audioCursor.getString(file_id));
                audioList.add(info);
            } while (audioCursor.moveToNext());
        }
    }
    assert audioCursor != null;
    audioCursor.close();
} catch (Exception e) {
    e.printStackTrace();
}
}
票数 2
EN

Stack Overflow用户

发布于 2016-09-06 18:57:52

嗨,使用和查询媒体文件,如音频、图像和视频,请查看本教程

http://www.androiddevelopersolutions.com/2015/12/android-media-store-tutorial-list-all.html

列出所有图像的

代码语言:javascript
复制
private void parseAllImages() {
    try {
        String[] projection = {MediaStore.Images.Media.DATA};
        cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                projection, // Which columns to return
                null,       // Return all rows
                null,
                null);


        int size = cursor.getCount();

        /*******  If size is 0, there are no images on the SD Card. *****/

        if (size == 0) {

        } else {

            int thumbID = 0;
            while (cursor.moveToNext()) {

                int file_ColumnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);

                /**************** Captured image details ************/

                /*****  Used to show image on view in LoadImagesFromSDCard class ******/
                String path = cursor.getString(file_ColumnIndex);

                String fileName = path.substring(path.lastIndexOf("/") + 1, path.length());

                MediaFileInfo mediaFileInfo = new MediaFileInfo();
                mediaFileInfo.setFilePath(path);
                mediaFileInfo.setFileName(fileName);
                mediaFileInfo.setFileType(type);
                mediaList.add(mediaFileInfo);
            }
        }


    } catch (Exception e) {
        e.printStackTrace();
    }

}

用于列出所有视频(.mp4)

代码语言:javascript
复制
private void parseAllVideo() {
    try {
        String name = null;
        String[] thumbColumns = {MediaStore.Video.Thumbnails.DATA,
                MediaStore.Video.Thumbnails.VIDEO_ID};

        int video_column_index;
        String[] proj = {MediaStore.Video.Media._ID,
                MediaStore.Video.Media.DATA,
                MediaStore.Video.Media.DISPLAY_NAME,
                MediaStore.Video.Media.SIZE};
        Cursor videocursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                proj, null, null, null);
        int count = videocursor.getCount();
        Log.d("No of video", "" + count);
        for (int i = 0; i < count; i++) {
            MediaFileInfo mediaFileInfo = new MediaFileInfo();
            video_column_index = videocursor
                    .getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
            videocursor.moveToPosition(i);
            name = videocursor.getString(video_column_index);

            mediaFileInfo.setFileName(name);

            int column_index = videocursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            videocursor.moveToPosition(i);
            String filepath = videocursor.getString(column_index);

            mediaFileInfo.setFilePath(filepath);
            mediaFileInfo.setFileType(type);
            mediaList.add(mediaFileInfo);
            // id += " Size(KB):" +
            // videocursor.getString(video_column_index);


        }
        videocursor.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

}

用于列出所有音频

代码语言:javascript
复制
private void parseAllAudio() {
    try {
        String TAG = "Audio";
        Cursor cur = getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
                null);

        if (cur == null) {
            // Query failed...
            Log.e(TAG, "Failed to retrieve music: cursor is null :-(");

        }
        else if (!cur.moveToFirst()) {
            // Nothing to query. There is no music on the device. How boring.
            Log.e(TAG, "Failed to move cursor to first row (no query results).");

        }else {
            Log.i(TAG, "Listing...");
            // retrieve the indices of the columns where the ID, title, etc. of the song are

            // add each song to mItems
            do {
                int artistColumn = cur.getColumnIndex(MediaStore.Audio.Media.ARTIST);
                int titleColumn = cur.getColumnIndex(MediaStore.Audio.Media.TITLE);
                int albumColumn = cur.getColumnIndex(MediaStore.Audio.Media.ALBUM);
                int durationColumn = cur.getColumnIndex(MediaStore.Audio.Media.DURATION);
                int idColumn = cur.getColumnIndex(MediaStore.Audio.Media._ID);
                int filePathIndex = cur.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                Log.i(TAG, "Title column index: " + String.valueOf(titleColumn));
                Log.i(TAG, "ID column index: " + String.valueOf(titleColumn));

                Log.i("Final ", "ID: " + cur.getString(idColumn) + " Title: " + cur.getString(titleColumn) + "Path: " + cur.getString(filePathIndex));
                MediaFileInfo audio = new MediaFileInfo();
                audio.setFileName(cur.getString(titleColumn));
                audio.setFilePath(cur.getString(filePathIndex));
                audio.setFileType(type);
                mediaList.add(audio);

            } while (cur.moveToNext());
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39354275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档