Android Haipad M701在请求外部存储时使用/nand目录

Android Haipad M701在请求外部存储时使用/nand目录,android,Android,我有一个Android应用程序,如果可以存储各种文件,它会优先使用外部存储,但如果外部存储不可用,它会使用内部存储 我已经扩展了应用程序,并为应用程序的工作目录维护了一个静态文件,如下所示 public class MyApp extends Application { protected static File myFilesDir = null; protected static Helper myHelper = null; @Override publi

我有一个Android应用程序,如果可以存储各种文件,它会优先使用外部存储,但如果外部存储不可用,它会使用内部存储

我已经扩展了应用程序,并为应用程序的工作目录维护了一个静态文件,如下所示

public class MyApp extends Application {
    protected static File myFilesDir = null;
    protected static Helper myHelper = null;

    @Override
    public void onCreate() {
        super.onCreate();

        myHelper = new Helper(this);
        if (myHelper.CanWriteExtStorage()) {
            Log.d(TAG, "onCreate() - myHelper.CanWriteExtStorage() returned TRUE");
            myFilesDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/" + packageName + "/files");
        }
        else {
            Log.d(TAG, "onCreate() - myHelper.CanWriteExtStorage() returned FALSE");
            myFilesDir = new File(getFilesDir().getAbsolutePath());
        }
        myFilesDir.mkdirs();

        if (!myFilesDir.equals(null)) {
            Log.d(TAG, "onCreate() - myFilesDir: " + myFilesDir.getAbsolutePath());
}
protected boolean CanWriteExtStorage() {
    boolean mExternalStorageWriteable = false;
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state))
            mExternalStorageWriteable = true;
    return mExternalStorageWriteable;
}
D/com.mycompany.myapp(3844): onCreate() - myHelper.CanWriteExtStorage() returned TRUE
D/com.mycompant.myapp(3844): onCreate() - myFilesDir: /nand/Android/data/com.company.myapp/files
该应用程序目前正在由我直接接触的一些人进行测试,一个人评论说,他认为我应该使用SD卡(如果有),但他可以从logcat中看到该应用程序使用的是
/nand/Android/data…
我问/nand引用了什么,他说这是他的平板电脑/平板电脑设备上的内存

Helper类用于检查外部存储的代码如下所示

public class MyApp extends Application {
    protected static File myFilesDir = null;
    protected static Helper myHelper = null;

    @Override
    public void onCreate() {
        super.onCreate();

        myHelper = new Helper(this);
        if (myHelper.CanWriteExtStorage()) {
            Log.d(TAG, "onCreate() - myHelper.CanWriteExtStorage() returned TRUE");
            myFilesDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/" + packageName + "/files");
        }
        else {
            Log.d(TAG, "onCreate() - myHelper.CanWriteExtStorage() returned FALSE");
            myFilesDir = new File(getFilesDir().getAbsolutePath());
        }
        myFilesDir.mkdirs();

        if (!myFilesDir.equals(null)) {
            Log.d(TAG, "onCreate() - myFilesDir: " + myFilesDir.getAbsolutePath());
}
protected boolean CanWriteExtStorage() {
    boolean mExternalStorageWriteable = false;
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state))
            mExternalStorageWriteable = true;
    return mExternalStorageWriteable;
}
D/com.mycompany.myapp(3844): onCreate() - myHelper.CanWriteExtStorage() returned TRUE
D/com.mycompant.myapp(3844): onCreate() - myFilesDir: /nand/Android/data/com.company.myapp/files
…但相关日志输出如下所示

public class MyApp extends Application {
    protected static File myFilesDir = null;
    protected static Helper myHelper = null;

    @Override
    public void onCreate() {
        super.onCreate();

        myHelper = new Helper(this);
        if (myHelper.CanWriteExtStorage()) {
            Log.d(TAG, "onCreate() - myHelper.CanWriteExtStorage() returned TRUE");
            myFilesDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/" + packageName + "/files");
        }
        else {
            Log.d(TAG, "onCreate() - myHelper.CanWriteExtStorage() returned FALSE");
            myFilesDir = new File(getFilesDir().getAbsolutePath());
        }
        myFilesDir.mkdirs();

        if (!myFilesDir.equals(null)) {
            Log.d(TAG, "onCreate() - myFilesDir: " + myFilesDir.getAbsolutePath());
}
protected boolean CanWriteExtStorage() {
    boolean mExternalStorageWriteable = false;
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state))
            mExternalStorageWriteable = true;
    return mExternalStorageWriteable;
}
D/com.mycompany.myapp(3844): onCreate() - myHelper.CanWriteExtStorage() returned TRUE
D/com.mycompant.myapp(3844): onCreate() - myFilesDir: /nand/Android/data/com.company.myapp/files
所以,问题是,当我能够测试外部存储状态是否显示它已装入时,为什么
Environment.getExternalStorageDirectory()
会返回一个似乎是内部存储的路径

我是否应该测试除Environment.MEDIA_-MOUNTED之外的其他东西,或者这个设备或Android版本(他运行的是v2.1)是否有什么奇怪的地方


从长远来看,这可能并不重要,但我担心我的逻辑对于某些设备是不正确的。

阅读文档了解更多信息

注意:不要被这个词弄糊涂了 这里是“外部”。这个目录可以 最好被认为是媒体/共享 存储它是一个可以 保存相对大量的数据 这是所有人的共同点 应用程序(不强制执行) 权限)。传统上,这是一个 SD卡,但也可能是 在中作为内置存储实现 与设备不同的设备 受保护的内部存储,并且可以 作为文件系统安装在计算机上。 在具有多个“外部”的设备中 存储目录(例如 安全的应用程序存储和可安装 共享存储),此目录 表示“主要”外部 用户将交互的存储 有


我个人没有看到过这样的案例,但getExternalStorageDirectory不需要返回存储卡。将返回的目录视为共享存储是正确的做法,因为这是设备制造商有意做出的决定。

我以前确实读过这一点,但没有正确地选择“也可以在不同于受保护的内部存储的设备中实现为内置存储”(或者不太明白)。所以他有内部的“nand”和SD卡存储,制造商决定“nand”比SD卡更受欢迎……嗯。我不确定他们的决定是否同意,因为这会引起一些小问题。谢谢你的回答。@先生,我觉得你可能不喜欢:)不幸的是,我找不到一种方法来请求另一种类型(nand和SD卡),我同意似乎只有这两种方法,并没有可供选择的参数。我将给他一个定制的apk,它将明确针对我知道他拥有的SD卡。这至少有助于解释使用nand是否是他存在的问题的根源。再次感谢。