MediaStore.Images.Media.getContentUri(String volumeName):Uri是做什么用的?

10
除了这个方法外,Content Provider Media API的公共方法对我来说看起来非常直接。我不确定这个方法是做什么或如何使用它。如果有关于使用方法的任何见解,将不胜感激。

1
今天当我查看MediaStore.Audio.Media.getContentUri(String volumeName)方法时,同样的问题困扰了我。一个月前发布了这个问题,有44次浏览但没有人能够回答?:( - rineez
2个回答

6
你需要在代码中使用 "internal" 表示 INTERNAL_CONTENT_URI ,使用 "external" 表示 EXTERNAL_CONTENT_URI,这是根据源代码显示的。
    /**
     * Get the content:// style URI for the image media table on the
     * given volume.
     *
     * @param volumeName the name of the volume to get the URI for
     * @return the URI to the image media table on the given volume
     */
    public static Uri getContentUri(String volumeName) {
        return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
                "/images/media");
    }

    /**
     * The content:// style URI for the internal storage.
     */
    public static final Uri INTERNAL_CONTENT_URI =
            getContentUri("internal");

    /**
     * The content:// style URI for the "primary" external storage
     * volume.
     */
    public static final Uri EXTERNAL_CONTENT_URI =
            getContentUri("external");

CONTENT_AUTHORITY_SLASHcontent://media/ 一样好用。

public static final String AUTHORITY = "media";

private static final String CONTENT_AUTHORITY_SLASH = "content://" + AUTHORITY + "/";

但是 volumeName 是指您的SD卡上的目录名称吗? - Azurespot
@NoniA。volumeName指的是存储类型。通常情况下,内部存储被视为私有,外部存储被视为公共。 - soKira

4

我认为音量名称 "external""internal" 分别用于指代媒体的外部(sdcard)和内部位置。每个 Media 子容器都有这些音量名。

它们还具有内部和外部URI的静态常量,这可能比使用 getContentUri(volumeName) 更可取。

即,我认为(但我没有验证)

MediaStore.Images.Media.getContentUri("external").equals(MediaStore.Images.Media.EXTERNAL_CONTENT_URI)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接