我又遇到了一个之前被问过并且回答过的问题,但在我的实现中仍然无法正常运行。
我正是在主活动的 onCreate 方法的开头立即调用了 getExternalFilesDir(null)。无论我在模拟器上还是在我的手机上(三星 Galaxy Plus),它每次都返回 null。
是的,我在我的 AndroidManifest.xml 文件中有<uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" />
这一行,而且在调用之前我已经检查了外部存储状态,并且它是已挂载的。
这是我 onCreate() 方法内的前三行代码。实际上,它们就在 super.onCreate() 和 setContentView() 调用之后。
String state = Environment.getExternalStorageState();
File extFiles = getExternalFilesDir(null);
File locFiles = getFilesDir();
所以,一旦这三行代码被执行,这些变量的值如下:
state == "mounted"
extFiles == null
locFiles == "/data/data/com.mypackage.name/files"
有人知道为什么会出现这种情况吗?
-----编辑-----
所以我尝试了另一种方法;不是使用getExternalFilesDir(null)
,而是使用File basePath = new File(Environment.getExternalStorageDirectory(), "myAppName");
虽然这不是理想的做法,我也知道Android文档说应该使用getExternalFilesDir()
,我也同意这样做。但鉴于对我来说这个方法不起作用,我不得不尝试其他方法。这次函数确实返回了一个有效的文件对象,因此,在上述行之后,basePath的路径为/mnt/sdcard/myAppName,目前看起来还不错。当我使用DDMS进行检查时,可以看到/mnt/sdcard存在,但/mnt/sdcard/myAppName不存在,这是意料之中的。所以我调用了boolean result = basePath.mkdirs();
但是这返回false,当我在文件系统上检查时,可以确认myAppName子文件夹没有被创建。当我通过DDMS手动创建文件夹并将文件放入其中时,我可以从我的应用程序中读取这些文件,但我无法在该文件夹中写任何文件。
请帮忙!我已经束手无策了。
MUSIC
吗? - njzk2