美文网首页
Android外部存储

Android外部存储

作者: CP9 | 来源:发表于2017-03-09 15:07 被阅读278次

外部存储文件的特点

  • 可能是可移除的存储介质(例如 SD 卡)或内部(不可移除)存储
  • 所有应用都能读取和写入放置在外部存储上的文件,并且用户可以移除这些文件
  • 如果用户在计算机上装载了外部存储或移除了介质,则外部存储可能变为不可用状态

如何使用外部存储?

第一步,检查sd卡是否可用 —— Environment.getExternalStorageState()

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}

第二步,添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

从 Android 4.4 开始,读取或写入应用私有目录中的文件不再需要 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE权限

第三步,创建文件

如何在外部存储创建公共文件?——Environment.getExternalStoragePublicDirectory()

        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
            return;
        File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
        File file = new File(path, "first.mp3");
        try {
            // 确认Music目录存在
            path.mkdirs();

            InputStream in = getResources().openRawResource(R.raw.guangliang_first);
            FileOutputStream out = new FileOutputStream(file);

            byte[] bytes = new byte[in.available()];
            in.read(bytes);
            out.write(bytes);
            in.close();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

运行上述代码后,如果出现FileNotFoundException:/storage/emulated/0/****()(Permission denied)的问题,请参阅Andorid的权限控制 或者手动设置(应用管理—>Your App—>权限—>存储),否则会在/storage/emulated/0/Music目录下多出first.mp3文件:

external_music_path.png

注意/storage/emulated/0是模拟器中的目录,在真机中的目录,例如ES文件浏览器中的目录是本地\sdcard

外部存储私有文件的特点

  • 当用户卸载您的应用时,此目录及其内容不会被删除
  • 系统媒体扫描程序会读取这些目录中的文件,因此能从 MediaStore 内容提供程序访问这些文件,例如华为手机的文件管理能在分类中的音频找到该文件。
  • 应将这些目录用于最终属于用户的媒体,例如使用您的应用拍摄或编辑的照片或用户使用您的应用购买的音乐等 — 这些文件应保存在公共目录中

如何在外部存储创建私有文件?—— ContextWrapper.getExternalFilesDir()

和创建公共文件类似,我们只需要更改一行代码

File path = getExternalFilesDir(Environment.DIRECTORY_MUSIC);

运行上述代码后,会在/storage/emulated/0/Android/data/your package/files/Music目录下多出first.mp3文件:

external_private_music_path.png

外部存储私有文件的特点

  • 当用户卸载您的应用时,此目录及其内容将被删除
  • 系统媒体扫描程序不会读取这些目录中的文件,因此不能从 MediaStore 内容提供程序访问这些文件。
  • 不应将这些目录用于最终属于用户的媒体,例如使用您的应用拍摄或编辑的照片或用户使用您的应用购买的音乐等 — 这些文件应保存在公共目录中

第四步,通知media scanner文件更新 —— MediaScannerConnection

.....
MediaScannerConnection.scanFile(this,
                    new String[] { file.toString() }, null,
                    new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                    Log.i("ExternalStorage", "Scanned " + path + ":");
                    Log.i("ExternalStorage", "-> uri=" + uri);
                }
            });

如果不调用此方法,需要手动刷新才能看到创建的文件。

相关文章

  • Android storage

    Android存储结构android中的文件操作详解以及内部存储和外部存储彻底理解android中的内部存储与外部...

  • Android存储及路径

    Android存储及路径 Android手机存储分类 分为:内部存储和外部存储 如何区分内部存储和外部存储:可以从...

  • android相关本地存储目录

    android本地存储目录 内部存储 外部存储应用私有目录外部目录 获得内部存储目录 获得外部存储目录 获得外部存...

  • Android 内部存储和外部存储

    Android 存储可如下划分: 内部RAM 内部存储:内部ROM 外部存储:外部ROM和Sdcard 内部存储 ...

  • android存储

    Android中的存储 参考 彻底搞懂Android文件存储---内部存储,外部存储以及各种存储路径解惑[http...

  • android存储

    android手机分为外部存储和内部存储,外部存储是否存在因手机而异,可通过代码判断是否存在外部存储。 网上看到关...

  • Android外部存储

    外部存储文件的特点 可能是可移除的存储介质(例如 SD 卡)或内部(不可移除)存储 所有应用都能读取和写入放置在外...

  • Android五大存储之内部存储

    前序: Android五大存储:内部存储、外部存储、网络存储、SharedPreferences和SQLite ...

  • Android五大存储之外部存储

    前序: Android五大存储:内部存储、外部存储、网络存储、SharedPreferences和SQLite ...

  • Android 数据存储知识梳理(2) - Android存储目

    一、概述 对于Android系统中的存储,一般分为以下三个方面: 内部存储 外部存储 外部缓存目录 外部永久目录 ...

网友评论

      本文标题:Android外部存储

      本文链接:https://www.haomeiwen.com/subject/xxumgttx.html