在Android上创建可公开访问的日志文件的位置

时间:2016-09-29 18:01:58

标签: android c++ android-ndk android-external-storage

我们的应用程序有大量的C ++代码,可以将自己的日志文件创建为简单的.txt文件。它是一个循环缓冲区,因此它仅限于我们指定的大小。它也放在我们指定的任何目录中。

问题在于放置文件的位置,以便可以使用ADB或类似工具(无需生根)访问该文件。如果我们不关心可公开访问的部分,那么这似乎是找到该文件的合理位置:

packageManager.getApplicationInfo(applicationContext.getPackageName().dataDir

但是因为我们希望能够从客户的手机中提取文件以进行事后调试,所以我尝试将其放在这里:

"/mnt/sdcard/Android/data"

由于几个原因,这是有问题的,但我不确定它们是否都是真的。 (1)它是硬编码的; (2)并非所有Android设备都有外部存储,但我认为它们仍然将其映射到内部存储? (3)该位置不是特定于应用程序的,因此它不会随应用程序一起卸载。并且(4)需要EXTERNAL_STORAGE的运行时权限。

我相信1-3可以通过以下方式解决:

android.content.Context.getExternalFilesDir()

或者有更好的选择吗?

但我不相信这会绕过#4,这是不幸的,因为我不想用更多的许可请求“吓唬”用户。

处理此问题的最佳方法是什么?

1 个答案:

答案 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 /