错误记录Android 分区存储下的 SD 卡应用专属外部存储空间目录访问 ( 需手动创建应用专属外部存储空间目录 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误记录Android 分区存储下的 SD 卡应用专属外部存储空间目录访问 ( 需手动创建应用专属外部存储空间目录 )相关的知识,希望对你有一定的参考价值。





一、报错信息



开发时 , 需要向外置 SD 卡中拷贝一些文件 , 应用读取这些文件 , 进行相关配置 ;

但是 android 系统 , 并不会主动为应用创建文件 , 外置 SD 卡的应用专属外部存储空间目录 , 需要开发者自己创建 ;

当前的包名是 com.example.filepath ;

android {
    defaultConfig {
        applicationId "com.example.filepath"
    }
}

在 SD 卡根目录的 Android\\data 目录下 , 并没有 com.example.filepath 目录 , 说明 Android 系统并不是自动为每个应用都创建一个应用专属外部存储空间目录 ;





二、解决方案



在应用中 , 获取 应用专属外部存储空间目录 下的 cache 目录 , 如果没有创建该目录 ;

该目录的路径是 /storage/emulated/0/Android/data/com.example.filepath/cache ;

    /**
     * 应用专属外部存储空间目录下的 cache 目录
     */
    public void generateExternalCacheDir() {
        // 获取应用专属外部存储空间目录下的 cache 目录
        File cacheFile = getExternalCacheDir();
        Log.i(TAG, cacheFile.getAbsolutePath());
        if (!cacheFile.exists()) {
            // 如果 cache 目录不存在 , 则创建一系列目录
            cacheFile.mkdirs();
        }
    }

完整代码如下 :

package com.example.filepath;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.io.File;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        generateExternalCacheDir();
    }

    /**
     * 应用专属外部存储空间目录下的 cache 目录
     */
    public void generateExternalCacheDir() {
        // 获取应用专属外部存储空间目录下的 cache 目录
        File cacheFile = getExternalCacheDir();
        Log.i(TAG, cacheFile.getAbsolutePath());
        if (!cacheFile.exists()) {
            // 如果 cache 目录不存在 , 则创建一系列目录
            cacheFile.mkdirs();
        }
    }
}

运行后 , 自动创建该目录 ;

创建的目录 ;

以上是关于错误记录Android 分区存储下的 SD 卡应用专属外部存储空间目录访问 ( 需手动创建应用专属外部存储空间目录 )的主要内容,如果未能解决你的问题,请参考以下文章

从 Android for Work 应用程序访问 SD 卡数据

Android 内部存储/外部存储 及 读写权限

SD卡分区时需要注意什么?SD卡分区注意事项

如何使用 android studio 从应用程序中的内部或外部存储(SD 卡)读取文件?

Android应用存储路径选择方案的设计

我在ubuntu中对一张32g的sd卡进行分区,分区后用读卡器插到windows上发现只有255M?