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

Как правильно задать разрешения приложению на доступ к файлам?


Александр Алексеев

Вопрос

Написал простое прложение на C++ для Android. В приложении необходимо выбрать файл, что я и делаю с помощью компонента ListView и методов TDirectory::GetDirectories(Path) и TDirectory::GetFiles(Path). Однако после установки приложения (Android 6.0) приложение не показывает не список каталогов, ни список файлов. После добавления разрешения с настройках приложения (см. скриншот) всё начинает работать. Как изначально задать эти разрешения? Вроде все необходимые галочки в разделе Permissions я выставил (см. другой скриншот). Подскажите пожалуйста!

2022-02-03_22-45-51.png

Screenshot_2022-02-03-22-53-40-457_com.google.android.packageinstaller.png

Screenshot_2022-02-03-22-53-58-937_com.miui.securitycenter.png

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

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

  • 0

 

Вроде разобрался:

В момент показа формы FormShow вызываю метод проверки прав доступа CheckPermissions. А в нём передаётся имя метода, который будет сообщать о результате действий пользователя LocationPermissionRequestResult

//---------------------------------------------------------------------------
void __fastcall TForm2::CheckPermissions(TObject *Sender)
{ // Проверка прав доступа
String READ_EXTERNAL_STORAGE;
READ_EXTERNAL_STORAGE=JStringToString(TJManifest_permission::JavaClass->READ_EXTERNAL_STORAGE);
//PermissionsService->DefaultService->RequestPermissions(READ_EXTERNAL_STORAGE);
DynamicArray<String> permissions;
permissions.Length = 1;
permissions[0] = READ_EXTERNAL_STORAGE;
PermissionsService()->RequestPermissions(permissions,LocationPermissionRequestResult);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::LocationPermissionRequestResult(TObject *Sender, const DynamicArray<String> APermissions, const DynamicArray<TPermissionStatus> AGrantResults)
{ // 2 permissions involved: ACCESS_COARSE_LOCATION and ACCESS_FINE_LOCATION
bool LocationPermissionGranted = (AGrantResults.Length == 1) && (AGrantResults[0] == TPermissionStatus::Granted);
if (LocationPermissionGranted) ;//ShowMessage("User granted permission");
else {
    if (Lang=="en") ShowMessage("User denied permission!");
    else ShowMessage("Пользователь запретил доступ!");
    Form2->Close();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormShow(TObject *Sender)
{
// Проверка прав доступа
CheckPermissions(this);
}
//---------------------------------------------------------------------------
 

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

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