上下文 - 无法创建外部文件目录

时间:2015-12-11 11:19:20

标签: android android-context nexus-4

当你在Nexus 4上启动app时,我的应用程序出现了一个非常奇怪的问题。

我在Application类中有以下代码:

public class MyApp extends Application {

@Override
public void onCreate() {
    super.onCreate();
    File dir = this.getExternalFilesDir(null);
    if (dir == null) {
        Log.e("App", "Problem with my dir!");
    }
}

在LogCat中,我看到了消息:

  

12-11 14:09:05.402 11739-11739 / com.company.app W / ContextImpl:无法创建外部文件目录
  12-11 14:09:05.402 11739-11739 / com.company.app E / App:我的导演有问题!

我的<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />已经AndroidManifest.xml

此外,只有在我重新安装我的应用程序并且不重新启动设备时才会出现此问题。如果我重新启动Nexus,问题就会消失。

这个简单的代码片段有什么问题?..

提前感谢您的回复。

2 个答案:

答案 0 :(得分:0)

你必须这样做

File dir = new File (this.getExternalFilesDir(null) + "/NewDirectory");  
if(!dir.exists()){
  f.mkdirs();// if there is no directory then create new
}

使用getExternalFilesDir()时无需添加权限。只有在使用getExternalStorageDirectory()

时才需要它

答案 1 :(得分:0)

我终于找到了这种奇怪行为的原因。

在我的应用程序中,在lists = List.joins("LEFT JOIN items on lists.id = items.list_id").group("lists.id") 类中进行了一些初始化后,我开始记录这样的过程:

Application

并且我没有在任何地方破坏这个过程。这就是为什么在重新安装我的应用程序后,Android无法创建外部文件目录或缓存目录。

要点:

  1. 如果您开始某个过程,请不要忘记销毁它,例如:

    Process process = Runtime.getRuntime()。exec(cmd); ... process.destroy();

  2. 要检查,如果您的设备上运行了一些异常进程,则可以使用String[] cmd = new String[] { "logcat", "-f", myFileNameFromExternalDir, "-v", "time" }; Runtime.getRuntime().exec(cmd); 。例如:

  3. 在Windows cmd中

    adb shell

    在Android shell中

    ps - 它会列出您设备上的所有进程。

    如果您发现了一些有趣的内容,可以通过adb shell命令检查此进程是否属于您的应用程序:

    lsof -p process_name | grep app_package