Где создать общедоступный файл журнала на Android

Наше приложение имеет большой объем кода 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, что вызывает сожаление, поскольку я предпочел бы не «пугать» пользователей большим количеством запросов на разрешение.

Какой лучший способ справиться с этим?

0

Решение

Убедитесь, что у вас есть права на чтение и запись Внешнего 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/

1

Другие решения

Других решений пока нет …