上下文 - 无法创建外部文件目录
Context - unable to create external files directory
当您在 Nexus 4 上启动应用程序时,我的应用程序出现了一个非常奇怪的问题。
我在应用程序 class:
中有以下代码
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: Unable to create external files directory
12-11 14:09:05.402 11739-11739/com.company.app E/App: Problem with my dir!
我的 AndroidManifest.xml
中已有 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
。
此外,此问题仅在我重新安装我的应用程序并且不重启我的设备时出现。如果我重新启动 Nexus,问题就会消失。
这个简单的代码片段有什么问题?..
预先感谢您的回复。
你必须这样做
File dir = new File (this.getExternalFilesDir(null) + "/NewDirectory");
if(!dir.exists()){
f.mkdirs();// if there is no directory then create new
}
使用getExternalFilesDir()
时无需添加权限。只有在使用 getExternalStorageDirectory()
时才需要
我终于找到了这种奇怪行为的原因。
在我的应用程序中,在 Application
class 中进行一些初始化后,我已经开始这样的记录过程:
String[] cmd = new String[] {
"logcat", "-f", myFileNameFromExternalDir, "-v", "time"
};
Runtime.getRuntime().exec(cmd);
而且我没有在任何地方破坏这个过程。这就是为什么在重新安装我的应用程序后,Android 无法创建外部文件目录或缓存目录。
总结:
如果你启动了某个进程,不要忘记销毁它,例如:
进程进程=Runtime.getRuntime().exec(cmd);
...
process.destroy();
要检查,如果您的设备上有一些异常进程运行,您可以使用adb shell
。例如:
在Windowscmd
adb shell
在Androidshell
ps - 它将列出您设备上的所有进程。
如果您发现了一些有趣的东西,您可以使用 lsof
命令检查此进程是否属于您的应用程序:
lsof -p process_name | grep app_package
当您在 Nexus 4 上启动应用程序时,我的应用程序出现了一个非常奇怪的问题。
我在应用程序 class:
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: Unable to create external files directory
12-11 14:09:05.402 11739-11739/com.company.app E/App: Problem with my dir!
我的 AndroidManifest.xml
中已有 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
。
此外,此问题仅在我重新安装我的应用程序并且不重启我的设备时出现。如果我重新启动 Nexus,问题就会消失。
这个简单的代码片段有什么问题?..
预先感谢您的回复。
你必须这样做
File dir = new File (this.getExternalFilesDir(null) + "/NewDirectory");
if(!dir.exists()){
f.mkdirs();// if there is no directory then create new
}
使用getExternalFilesDir()
时无需添加权限。只有在使用 getExternalStorageDirectory()
我终于找到了这种奇怪行为的原因。
在我的应用程序中,在 Application
class 中进行一些初始化后,我已经开始这样的记录过程:
String[] cmd = new String[] {
"logcat", "-f", myFileNameFromExternalDir, "-v", "time"
};
Runtime.getRuntime().exec(cmd);
而且我没有在任何地方破坏这个过程。这就是为什么在重新安装我的应用程序后,Android 无法创建外部文件目录或缓存目录。
总结:
如果你启动了某个进程,不要忘记销毁它,例如:
进程进程=Runtime.getRuntime().exec(cmd); ... process.destroy();
要检查,如果您的设备上有一些异常进程运行,您可以使用
adb shell
。例如:
在Windowscmd
adb shell
在Androidshell
ps - 它将列出您设备上的所有进程。
如果您发现了一些有趣的东西,您可以使用 lsof
命令检查此进程是否属于您的应用程序:
lsof -p process_name | grep app_package