android getExternalStorageDirectory() 和 getExternalStorageState()

来源:互联网 发布:java数组转json字符串 编辑:程序博客网 时间:2024/05/20 13:11

参考:《第一行代码》第8章

http://blog.csdn.net/yuzhiboyi/article/details/8645730

#####################################################################


/**     * Return the primary external storage directory. This directory may not     * currently be accessible if it has been mounted by the user on their     * computer, has been removed from the device, or some other problem has     * happened. You can determine its current state with     * {@link #getExternalStorageState()}.     * <p>     * <em>Note: don't be confused by the word "external" here. This directory     * can better be thought as media/shared storage. It is a filesystem that     * can hold a relatively large amount of data and that is shared across all     * applications (does not enforce permissions). Traditionally this is an SD     * card, but it may also be implemented as built-in storage in a device that     * is distinct from the protected internal storage and can be mounted as a     * filesystem on a computer.</em>     * <p>     * On devices with multiple users (as described by {@link UserManager}),     * each user has their own isolated external storage. Applications only have     * access to the external storage for the user they're running as.     * <p>     * In devices with multiple "external" storage directories, this directory     * represents the "primary" external storage that the user will interact     * with. Access to secondary storage is available through     * <p>     * Applications should not directly use this top-level directory, in order     * to avoid polluting the user's root namespace. Any files that are private     * to the application should be placed in a directory returned by     * {@link android.content.Context#getExternalFilesDir     * Context.getExternalFilesDir}, which the system will take care of deleting     * if the application is uninstalled. Other shared files should be placed in     * one of the directories returned by     * {@link #getExternalStoragePublicDirectory}.     * <p>     * Writing to this path requires the     * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} permission,     * and starting in read access requires the     * {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} permission,     * which is automatically granted if you hold the write permission.     * <p>     * Starting in {@link android.os.Build.VERSION_CODES#KITKAT}, if your     * application only needs to store internal data, consider using     * {@link Context#getExternalFilesDir(String)} or     * {@link Context#getExternalCacheDir()}, which require no permissions to     * read or write.     * <p>     * This path may change between platform versions, so applications should     * only persist relative paths.     * <p>     * Here is an example of typical code to monitor the state of external     * storage:     * <p>     * {@sample     * development/samples/ApiDemos/src/com/example/android/apis/content/ExternalStorage.java     * monitor_storage}     *     * @see #getExternalStorageState()     * @see #isExternalStorageRemovable()     */    public static File getExternalStorageDirectory() {        throwIfUserRequired();        return sCurrentUser.getExternalDirsForApp()[0];    }


翻译:

返回主外部存储目录。如果用户在电脑上安装了此目录,或者已经从该设备上移除,又或者发生了其他一些问题,那么此目录可能无法访问,你可以通过函数

getExternalStorageState()

确定它的状态。

注意:不要被“外部”这个词所迷惑。可能用媒体存储或者共享存储能更好的理解此目录。它是一个文件系统,拥有一个比较大的数据量,并且被所有应用程序所共享(不需要权限)。通常它是一个SD卡,不过也可以用设备上的内置存储实现(此内置存储和受保护的内部存储严格区分开),并且可以作为一个文件系统安装在电脑上。

一台设备上可以有多个用户,并且每个用户拥有自己独立的外部存储,应用程序只能访问正在运行用户的外部存储

在有多个外部存储路径的设备上,此目录表示主外部存储目录(用户将会和它进行互动)。不过二级外部存储也能够访问

为了避免污染用户的根命名系统,不应该直接使用顶层目录。

应用程序私人的文件应该被放置在某个目录,该目录可以通过

@link android.content.Context#getExternalFilesDir     * Context.getExternalFilesDir

得到,如果应用程序被卸载,那么系统自动会删除这些文件。其他的共享文件应该被放置在函数

@link #getExternalStoragePublicDirectory

返回的目录中

往路径上写东西需要权限

@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE

从路径例读东西需要权限

@link android.Manifest.permission#READ_EXTERNAL_STORAGE
如果你已经设置了写权限,那么读权限会被自动授与。

如果你的应用仅需要存储内部数据,考虑使用函数

@link Context#getExternalFilesDir(String)    or   <span style="font-family: Arial, Helvetica, sans-serif;">{@link Context#getExternalCacheDir()</span>

使用它们不需要读或者写的权限

路径可能会在不同平台版本之间改变,所以应该坚持使用相对路径



########################################################################


    /**     * Returns the current state of the primary "external" storage device.     *      * @see #getExternalStorageDirectory()     * @return one of {@link #MEDIA_UNKNOWN}, {@link #MEDIA_REMOVED},     *         {@link #MEDIA_UNMOUNTED}, {@link #MEDIA_CHECKING},     *         {@link #MEDIA_NOFS}, {@link #MEDIA_MOUNTED},     *         {@link #MEDIA_MOUNTED_READ_ONLY}, {@link #MEDIA_SHARED},     *         {@link #MEDIA_BAD_REMOVAL}, or {@link #MEDIA_UNMOUNTABLE}.     */    public static String getExternalStorageState() {        final File externalDir = sCurrentUser.getExternalDirsForApp()[0];        return getExternalStorageState(externalDir);    }

翻译:

返回主外部存储设备的当前状态

当外部存储设备状态是MEDIA_MOUNTED时,才可读可写


0 0
原创粉丝点击