0

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

在 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,问题就会消失。

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

预先感谢您的回复。

4

2 回答 2

0

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

在我的应用程序中,在Application课堂上进行了一些初始化之后,我开始了这样的日志记录过程:

String[] cmd = new String[] {
    "logcat", "-f", myFileNameFromExternalDir, "-v", "time"
};
Runtime.getRuntime().exec(cmd);

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

概括:

  1. 如果您启动了某个进程,请不要忘记将其销毁,例如:

    进程进程 = Runtime.getRuntime().exec(cmd); ... process.destroy();

  2. 要检查您的设备上是否正在运行一些异常进程,您可以使用adb shell. 例如:

在 Windows cmd

亚行外壳

在 Android 外壳中

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

如果您发现了一些有趣的东西,您可以使用以下命令检查此过程是否属于您的应用程序lsof

lsof -p进程名| grep app_package

于 2015-12-14T13:29:32.597 回答
0

你必须这样做

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

使用时getExternalFilesDir()无需添加权限。仅在使用时需要getExternalStorageDirectory()

于 2015-12-11T11:57:26.713 回答