2016-09-29 49 views
0

我們的應用程序有大量的C++代碼,可以創建自己的日誌文件作爲簡單的.txt文件。它是一個循環緩衝區,所以它只限於我們指定的大小。它也放置在我們指定的任何目錄中。在哪裏可以在Android上創建公共可訪問的日誌文件

問題在於放置文件的位置,以便使用ADB或類似工具(無生根)訪問它。如果我們不關心可公開訪問的部分,似乎這將是找到該文件的合理位置:

packageManager.getApplicationInfo(applicationContext.getPackageName().dataDir 

但是因爲我們希望能夠從一個客戶的電話拉文件後 - 試着調試,我試過把它放在這裏:

"/mnt/sdcard/Android/data" 

這是有問題的幾個原因,但我不確定它們是否都是如此。 (1)硬編碼; (2)並非所有的Android設備都有外部存儲,儘管我認爲他們仍將其映射到內部存儲? (3)該位置不是特定於應用程序的,因此它不會隨應用程序一起卸載。並且(4)EXTERNAL_STORAGE的運行時權限是必需的。

android.content.Context.getExternalFilesDir() 

還是有更好的選擇:

我相信1-3可以用類似解決?

但我不相信這會繞過#4,這是不幸的,因爲我不想「嚇倒」具有更多權限請求的用戶。

處理這個問題的最佳方法是什麼?

+0

與其他許多人一樣,您對Android內存方面「內部」和「外部」的含義感到困惑。 http://stackoverflow.com/documentation/android/150/storing-files-in-internal-external-storage/17144/android-internal-and-external-storage-terminology-clarification#t=201609292007145280414 –

+0

感謝您的鏈接!我相當肯定我現在對這個主題有了更好的理解,但根據Google的文檔,它似乎仍然需要檢查外部存儲狀態? https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory() – Bungles

+0

沒有什麼矛盾的。它適用於那些外部(即公用)存儲配置爲使用可移動媒體的設備 –

回答

1

請確保您有權限讀取和清單文件使用此代碼編寫外接SD:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

然後這個字符串會給你想要的路徑:

String directory = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/" + getContext().getPackageName(); 

/storage/emulated/0/Android/data/com.exemple.yourapp/

+0

謝謝!在寫入該目錄之前,我仍然需要使用「if(getExternalStorageState()== MEDIA_MOUNTED)」嗎?另外,我是否真的需要「/ Android/data /」或只是我的包名稱? – Bungles

+0

如果您使用/ Android/data /文件夾,那麼它的內容將在應用程序卸載時被刪除,所以如果您不想要,您可能只想使用'Environment.getExternalStorageDirectory()。getAbsolutePath()'。您不需要檢查,因爲外部存儲不是SD卡是設備的內部存儲。 –

+0

如果這回答你的問題,請標記:D –

相關問題