再一次,我遇到了一个之前已经提出并回答过的问题,但在我的实施中它仍然无法正常工作。
我在主要活动的onCreate方法一开始就调用getExternalFilesDir(null) 。无论我是在 AVD 中还是在手机(Samsung 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()
. 看来这对我不起作用,尽管我不得不尝试其他方法。这次该函数确实返回了一个有效的 File 对象,因此在上述行之后,basePath 的路径是/mnt/sdcard/myAppName。到目前为止,一切都很好。当我检查 DDMS 时,我可以看到/mnt/sdcard存在但不存在/mnt/sdcard/myAppName。这是可以预料的。所以我打电话boolean result = basePath.mkdirs();
但这返回 false ,当我检查文件系统时,我可以确认 myAppName 子文件夹尚未创建。当我通过 DDMS 手动创建文件夹并将文件放入其中时,我可以从我的应用程序中读取这些文件,但我无法在该文件夹中写入任何内容。
请帮忙!我无计可施。