3

我想获得一条通往我的 android 设备公共存储的路径。我有两个应用程序。一个是写一些日志文件,另一个是用来读取它们(因此我不能使用应用程序私有存储)。我想知道是否有一种方法可以为我提供设备“公共空间”的路径,我可以在其中轻松创建和读取文件。

这个解决方案不是我想要的:

http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

也不是:

如何在android中获取内部和外部sdcard路径

我的问题有简单的解决方案吗?外部公共存储是我要找的吗?

http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

问题是当我在我的设备上运行应用程序时一切正常,但是当我在没有存储卡的设备上运行它时,它就无法工作。所以我想使用外部公共存储,那不是存储卡......

我下面的代码不起作用(它不保存文件)。当我选择直接在 Environment.getExternalStorageDirectory().getAbsolutePath() 中的目录时,它可以工作......我做错了什么?:

transient private final String DIRECTORY = "/Android/data/com.aaa.bbb.ccc/files/";

public void writeLog()
{
    Calendar calendar = setDate();

    File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + DIRECTORY);
    if(!dir.exists())
        dir.mkdir();

    File file = new File (dir, "log_" + calendar.get(Calendar.YEAR) + "_"
                                 + ((calendar.get(Calendar.MONTH))+1) + "_"
                                 + calendar.get(Calendar.DAY_OF_MONTH)
                                 + ".dta");

...

}

更新:

为什么此代码有效:

    File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Dir1/");
    if(!dir.exists())
        dir.mkdir();

而这并不

    File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Dir1/Dir2/Dir3/");
    if(!dir.exists())
        dir.mkdir();
4

2 回答 2

1

试试看android.os.Environment 这里。

以下方法似乎很有趣..

public static File getDataDirectory ();
//Gets the Android data directory. 

public static File getDownloadCacheDirectory ();
//Gets the Android download/cache content directory.  

编辑: *解决方案: *

你犯的一个小错误是那时

替换这个:

if(!dir.exists())
    dir.mkdir();

和:

if(!dir.exists())
    dir.mkdirs(); // will create all the parent directories as well..

希望我现在帮助你

于 2013-05-30T05:20:12.777 回答
1

在某些设备中,外部 sdcard 默认名称显示为extSdCard,而对于其他设备,则为sdcard1。此代码片段有助于找出确切的路径并有助于检索外部设备的路径。

String sdpath, sd1path, usbdiskpath, sd0path; 
if (new File("/storage/extSdCard/").exists()) {
    sdpath="/storage/extSdCard/";
    Log.i("Sd Cardext Path", sdpath);
}
if (new File("/storage/sdcard1/").exists()) {
    sd1path="/storage/sdcard1/";
    Log.i("Sd Card1 Path", sd1path);
}
if (new File("/storage/usbcard1/").exists()) {
    usbdiskpath="/storage/usbcard1/";
    Log.i("USB Path", usbdiskpath);
}
if (new File("/storage/sdcard0/").exists()) {
    sd0path="/storage/sdcard0/";
    Log.i("Sd Card0 Path", sd0path);
}
于 2014-05-19T12:04:24.507 回答