2015-12-11 73 views
0

我有我的應用程序一個很奇怪的問題4.

我有以下的應用類別代碼的出現,當你上了Nexus啓動的應用程序:語境 - 無法創建外部文件目錄

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 /應用程序:問題與米你好!

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

此外,只有當我重新安裝我的應用程序和不重新啓動我的設備時纔會出現此問題。如果我重新啓動Nexus,問題就會消失。

什麼可能是錯誤的,在這個簡單的代碼片段?..

預先感謝您的回覆。

回答

0

我終於找到了這種奇怪行爲的原因。

在我的應用程序,在Application類中的一些初始化之後,我就開始記錄過程是這樣的:

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

而且我沒有破壞這個過程任何地方。這就是爲什麼重新安裝我的應用後,Android無法創建外部文件目錄或緩存目錄。

摘要:

  1. 如果你開始有些過程中,不要忘了去破壞它,e.g:

    工藝過程=調用Runtime.getRuntime()EXEC(CMD); ... process.destroy();

  2. 若要檢查設備上是否運行了一些不尋常的進程,可以使用adb shell。例如:

在Windows在cmd

亞行外殼

在Android的殼

PS - 它會列出您的設備上的所有進程。

如果您發現了一些有趣的事情,你可以檢查,這是否屬於程序到應用程序與lsof命令:

lsof的-p PROCESS_NAME | grep app_package

0

你必須做這樣

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

時使用getExternalFilesDir()無需添加權限。它只在使用時需要getExternalStorageDirectory()

+0

謝謝,但這不會解決我的問題。我最初的任務 - 獲取我的應用程序目錄中的文件夾的路徑(它將像這樣 - /data/com.company.app/)。但'this.getExternalFilesDir(null)'返回給我'null' - 這是我的問題。但是當我重新安裝我的應用程序後重新啓動我的設備時,問題就消失了。 –

相關問題