0

我正在android中做一个OCR应用程序。为此,我需要将经过训练的数据和图像存储在我的应用程序文件夹中。直到现在我一直在使用

public static String DATA_PATH = Environment.getExternalStorageDirectory().toString() + "/NewsReader/"

这在具有外部 SD 卡的设备上工作得非常好。

但是,当我尝试在没有插入 SD 卡的设备上运行相同的应用程序并在内部存储或像 Nexus 这样只有内部存储的设备上运行时,应用程序会失败。我在这里有什么选择。我可以检查外部存储的状态以查看其是否可用,但如果没有,那么我的应用程序应该做什么而不是崩溃。我什至尝试过,getFilesDir().toString() + "/NewsReader/" 但结果相同。

编辑

从我得到上述问题的一些答案中并不能说明我真正的问题是什么让我更清楚一点。

我正在这样做:public static String DATA_PATH = Environment.getExternalStorageDirectory().toString() + "/NewsReader/" 当我在具有外部 SD 卡的设备上运行它时,它会完美地在手机中创建文件夹 NewsReader。但无法在只有内部存储的设备上运行。加起来,目前我正在线程中的 splsh 活动中创建所有这些文件,但早些时候当我在正常的活动 OnCreate 中执行相同的代码时,它曾经在所有设备上运行。

4

4 回答 4

0

您必须首先通过以下代码检查外部存储是否存在:

/* 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;}

您可以改用内部存储。内部存储可以通过以下代码使用:

File internal_storagefile = new File("/data/YourPackageName/files/abc.jpg");

您甚至可以通过以下方式获取内部存储路径:

File internalPath = File("/data/" + getApplicationContext().getPackageName() + "/");

来源:Android 存储选项

谢谢你。

于 2014-04-02T05:58:14.503 回答
0
Environment.getExternalStorageState() returns path to internal SD mount point like "/mnt/sdcard"

不,Environment.getExternalStorageDirectory() 指的是设备制造商认为是“外部存储”的任何内容。在某些设备上,这是可移动媒体,例如 SD 卡。在某些设备上,这是设备上闪存的一部分。在这里,“外部存储”是指“安装在主机上时可通过 USB 大容量存储模式访问的东西”,至少对于 Android 1.x 和 2.x 而言。但问题是关于外部 SD。如何获得像“/mnt/sdcard/external_sd”这样的路径(它可能因设备而异)?

Android has no concept of "external SD", aside from external storage, as described above.

如果设备制造商选择将外部存储设备作为板载闪存并且还具有 SD 卡,则您需要联系该制造商以确定您是否可以使用 SD 卡(不保证)以及规则的用途使用它,例如使用什么路径。

https://stackoverflow.com/a/5695129/596555
https://stackoverflow.com/a/15131810/596555

于 2014-04-02T06:14:57.983 回答
0

阅读此内容希望对您有所帮助http://developer.android.com/guide/topics/data/data-storage.html

您可以使用 SharedPreferences:

保存数据:

SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
 editor.putString("text", mSaved.getText().toString());
 editor.putInt("selection-start", mSaved.getSelectionStart());
 editor.putInt("selection-end", mSaved.getSelectionEnd());
 editor.commit();

要检索数据:

SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
String restoredText = prefs.getString("text", null);
int selectionStart = prefs.getInt("selection-start", -1);
int selectionEnd = prefs.getInt("selection-end", -1);
于 2014-04-02T05:50:21.140 回答
0

如果没有外部存储,则不能存储在外部存储中是合乎逻辑的。您可以检查设备是否具有外部存储。

如果没有,那么您必须将数据存储在内部存储中。

`String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        //do your code for external storage
    }else {
        //for internal storage
    }`
于 2014-04-02T05:54:25.727 回答