/mnt/sdcard/OSGiComponents/admin/felix-cache/
这是代码:
File cacheDir = new File( Environment.getExternalStorageDirectory().getAbsolutePath() + "/OSGiComponents/admin/felix-cache/" ); // Create the folder cacheDir.mkdirs(); // Check if it exists if ( ! cacheDir.exists() ) { Log.e ( "Debug","Cache directory cannot be created" ); }
我在android清单文件的清单标签下有WRITE_STORAGE_PERMISSION.我能够在SD卡上创建其他文件夹和文件而没有问题.
该应用程序适用于以下手机:
> Nexus S(扎根)运行姜饼(2.3)
>运行Jelly Bean的Nexus S(无根)(4.1.2)
> HTC Desire(rooted)运行Froyo(2.2)
> HTC Desire(无根)运行Froyo(2.2)
但是在运行Ice Cream Sandwich(4.0.4)的三星Galaxy Nexus手机(无根)上,该目录被创建为零大小的文件,可以在Astro中看到. exists()调用返回false.
>正如您从文件夹名称中看到的,我正在使用Apache Felix.如果不存在,Felix会自动创建缓存目录.在Galaxy Nexus上,它总是抱怨它无法创建缓存目录. Astro显示0字节文件而不是文件夹.这就是我决定在初始化Felix之前尝试自己创建缓存文件夹的原因.
>所以,我自己创建了缓存文件夹.该应用程序第一次正常工作,我可以在Astro中看到该文件夹正常.如果我关闭应用程序,然后删除Astro中的文件夹,然后重新启动应用程序,甚至我的代码神秘地无法创建缓存目录,Astro显示0字节文件.
>在Astro中无法删除0字节文件.但是,当我重新启动手机时,文件夹神奇地存在并且没问题.
>我使用FileInstall来观看OSGiComponents / install文件夹.当我将捆绑罐放入该文件夹时,它会在除Galaxy Nexus之外的所有手机上检测并安装好(当应用程序第一次运行时). FileInstall没有关于无法查看目录的日志/错误.
>我已经在2台Galaxy Nexus手机上测试了这个,同样的问题.
我怀疑这是一个权限问题,但我不确定它是什么,以及为什么创建一个0字节文件而exists()返回false.代码中没有其他地方我创建此文件.
关于可能出现什么问题的任何建议?
谢谢 :)
更新:我想我已经确定了这个问题,请看我发布的答案.
解决方法
File cacheDir = new File( Environment.getExternalStorageDirectory().getAbsolutePath() + "/OSGiComponents/admin/felix-cache/" ); cacheDir.mkdirs();
至
File cacheDir = new File( Environment.getExternalStorageDirectory().getAbsolutePath() + "/OSGiComponents/admin/felix-cache" ); cacheDir.mkdir();