Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как получить путь к файлу в Андроид приложении?


Kitty

Вопрос

Здравствуйте.
В новом С++ Builder XE6 появилась возможность программировать под Андроид. Опыта в этом нет. Подскажите, пожалуйста, как получить путь к файлу в Андроид проекте? Код для Windows приложения не работает в Андроид проекте:

String path = ExtractFilePath(Application->ExeName) + L"\\files.ini";
if(FileExists(path))
{
 //****
}

Спасибо.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Я так понимаю - вам надо получить путь к каталогу где "лежит" само приложение для сохранение конфигов и т.п.

Для эти целей воспользуйтесь GetHomePath.

 

Однако учтите, что доступ к данному каталогу (если телефоне не root-ован) имеет только сама ваша программа (ну естественно и ось и т.п.). Т.е. зайти туда (без рута) вы не сможете.

Для хранения настроек программы, ресурсов - это вполне удобно. Однако для логов, или выгрузки результатов работы - лучше определить для себя иной каталог.

Ссылка на комментарий
  • 0
  • Модераторы

Прочитайте эту тему на форуме: Включение своих файлов в приложение

 

Для сохранения логов, отладочной информации можно использовать открытые для доступа папки вашего приложения, которые при удалении приложения также удаляются и не оставляют мусора, подробности вы можете найти в этой статье: Deployment Manager или куда ещё можно задеплоить файлы

 

 

А здесь (в комментариях), я объясняю, почему не стоит создавать папки в корне карты памяти: Обновляем файл базы данных без перезапуска приложения

 

Ссылка на комментарий
  • 0

Что-то не доходит до меня. :(

Подсоединила планшет с Андроид к RAD XE6, все нормально. Включила отладку по USB. Теперь пытаюсь в режиме debug на планшете увидеть путь к папке с документами:

void __fastcall TForm1::Button3Click(TObject *Sender)
{
 //почему-то точки останова не срабатывают
 Label1->Text = System::Ioutils::TPath::GetDocumentsPath();//стоит точка останова
}

После нажатия на кнопку вижу на экране планшета какой-то странный путь:

/data/data/com.embarcadero.MobProjectHelloWord/files

Если поменять GetDocumentsPath на GetHomePath, то получаю тот же путь;

/data/data/com.embarcadero.MobProjectHelloWord/files

Я хочу разместить на планшете файл INI, иметь к нему доступ и периодически иметь возможность менять этот файл простым копирование поверх. Если я скопирую файл INI на планшете в папку Андроида documents, то как правильно обратиться к этой папке?

Созданное приложение будет использоваться во внутренних корпоративных целях (никаких маркетов).

Спасибо.

Ссылка на комментарий
  • 0

Ini файл будет создаваться самим приложением?

Нет. INI файл готовый. В нем периодически руками будут менять некоторые данные в секциях (time/name) и после замены копировать поверх старого INI.

INI:

[FILE1]

time = 10:00:00

name = file1.mp4

[FILE2]

time = 12:00:00

name = file2.mp4

 

***

Ссылка на комментарий
  • 0
  • Модераторы

Для вашей ситуации:

 

Добавляем файл «settings.ini» в «Deployment Manager», в столбце «Remote Path» для нашего файла прописываем путь  «.\assets\», после установки приложения на устройство, этот файл будет лежать в папке «/storage/emulated/0/Android/data/<application ID>/files».

Получить быстрый доступ к этой папке можно при помощи «TPath.GetSharedDocumentsPath».

 

Соответственно в коде(на Delphi) путь до файла будет выглядеть так:

TPath.Combine(TPath.GetSharedDocumentsPath, 'settings.ini');

в случае если вы используете папку отличную от стандартных, т.е. создали папку вручную на карте памяти, то и полный путь до неё придётся прописывать вручную

Ссылка на комментарий
  • 0

Kitty

 

Если я не ошибаюсь, то класс TIniFile на мобилках не поддерживается. Или свой обработчик надо сделать, или сторонний взять. (вот тут что-то писали об этом http://francois-piette.blogspot.be/2014/01/tinifile-for-android-and-windows.html). Если я не прав - поправьте.

 

Что до пути - то да. это путь, где разворачивается программа. И, повторюсь, удобнее хранить ini-шники (если приходится их перезаливать или править руками) в иной папке (до хоть в документах или еще где). Конечно - надо учитывать, что при удалении программы останется этот ini-шный "мусор".

Ссылка на комментарий
  • 0

Спасибо за рекомендации. У меня все же еще такой вопрос. Вот на устройстве Андроид есть к примеру папка Music или к примеру Download. Эти папки по умолчанию присутствуют в прошивке этого Андроид устройства. Каким кодом я могу увидеть в метке Label1 путь к этим папкам? Например музыкальный фал лежит в папке Music, как из моего приложения достучаться до него?

 

P.S.

после установки приложения на устройство, этот файл будет лежать в папке «/storage/emulated/0/Android/data/<application ID>/files».

 

Можно ли как-то поработать с файлом INI на эмуляторе (для тестирования) или только это возможно после развертывания на реальной устройстве?

Ссылка на комментарий
  • 0
  • Администраторы

Если я не ошибаюсь, то класс TIniFile на мобилках не поддерживается. Или свой обработчик надо сделать, или сторонний взять. (вот тут что-то писали об этом http://francois-piette.blogspot.be/2014/01/tinifile-for-android-and-windows.html). Если я не прав - поправьте.

 

Ошибаетесь, TIniFile работает везде.

Ссылка на комментарий
  • 0
  • Администраторы

http://docwiki.embarcadero.com/Libraries/XE5/en/System.IOUtils.TPath

 

P.S. Просьба в будущем на каждый отдельный вопрос заводить отдельную тему. Так как вопрос был вначале об одном, а теперь поменялся на другой. Другим пользователям будет сложно найти на него ответ

Ссылка на комментарий
  • 0

http://docwiki.embarcadero.com/Libraries/XE5/en/System.IOUtils.TPath

 

P.S. Просьба в будущем на каждый отдельный вопрос заводить отдельную тему. Так как вопрос был вначале об одном, а теперь поменялся на другой. Другим пользователям будет сложно найти на него ответ

 

Спасибо. У меня в первом топике было как "получить путь к файлу в Андроид проекте?" Вроде я не отклонилась от темы.:)

Разве что еще уточняла можно ли поработать с INI на эмуляторе, но это тоже путь к файлу, только не на реальном устройстве.

Ссылка на комментарий
  • 0
  • Администраторы

Таким образом можно ошибочно посчитать, что любой вопрос в теме Андроид является не отклонением от правил. 

Если не трудно, заведите отдельным вопросом - вопрос про системные папки - музыка, документы и тд. Чтобы другие смогли быстро найти ответ.

Ссылка на комментарий
  • 0

 

Если я не ошибаюсь, то класс TIniFile на мобилках не поддерживается. Или свой обработчик надо сделать, или сторонний взять. (вот тут что-то писали об этом http://francois-piette.blogspot.be/2014/01/tinifile-for-android-and-windows.html). Если я не прав - поправьте.

 

Ошибаетесь, TIniFile работает везде.

 

Сорри. Буду знать :)

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...