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

android 13, чтение extrernal storage


Игорь Маринин

Вопрос

что-то в конец запутался.

в настройках проэкта в правах включено read external storage.

в манифест ещё добавил: android:requestLegacyExternalStorage="true"

в проге запрашиваю права:

    PermissionsService.RequestPermissions(
    [
      JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE),
      JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE),
    ],

даю разрешение в системе на доступ.

далее в проге, через :
 

    TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.STORAGE_SERVICE);

     LVolumes := LStorageManager.getStorageVolumes;

получаю UUID  флешки нормально.

сканирую папки на наличие определенных файлов.

и вот тут самое интересное, что система при поиске возвращает файлы только стандартных расширений, типа *.txt. *.mp3 а других файлов как буд-то нет. 

уже и по старинке через findFirst искал - то же самое.

был заметил, что в системе в разрешениях доступа файлов у меня было три пункта и если выбрать "разрешить чтение памяти в любом режиме" то о чудо все файлы при поиске находились. если просто "разрешить во время выполнения" то фиг, только стандартные расширения.

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

может есть у кого какие мысли, как всё же добиться что бы при поиске прога получала все имеющиеся файлы ?

или если это где-то в сборке влияет на наличие пункта ""разрешить чтение памяти в любом режиме""

уже и на старом api собирал и в деплой и стор конфигурации: нет этого пункта в разрешениях и всё..

помогите плиз, а то уже голова кипит..

 

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

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

  • 0

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


var
  PackageManager: JPackageManager;
begin
  
   if (TJBuild_VERSION.JavaClass.SDK_INT >= 30) then begin

      PackageManager := TAndroidHelper.Context.getPackageManager();
      optPermission := (PackageManager.checkPermission(
                  StringToJString('android.permission.MANAGE_EXTERNAL_STORAGE'),
                  TAndroidHelper.Context.getPackageName()) = TJPackageManager.JavaClass.PERMISSION_GRANTED) or (TJEnvironment.JavaClass.isExternalStorageManager);

      if not optPermission then begin
         var Intent: JIntent;
         Intent := TJIntent.JavaClass.init;
         Intent.setAction(StringToJString('android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION'));
         Intent.setData(TJnet_Uri.JavaClass.fromParts(StringToJString('package'), TAndroidHelper.Context.getPackageName(), nil));
         if intent.resolveActivity(TAndroidHelper.Context.getPackageManager) <> nil then TAndroidHelper.Activity.startActivity(Intent);
      end;

   end else
     PermissionsService.RequestPermissions(
                      [ JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE),
                        JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE) ], nil);

end;

 

Ссылка на комментарий
  • 0
19 часов назад, Игорь Маринин сказал:

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


var
  PackageManager: JPackageManager;
begin
  
   if (TJBuild_VERSION.JavaClass.SDK_INT >= 30) then begin

      PackageManager := TAndroidHelper.Context.getPackageManager();
      optPermission := (PackageManager.checkPermission(
                  StringToJString('android.permission.MANAGE_EXTERNAL_STORAGE'),
                  TAndroidHelper.Context.getPackageName()) = TJPackageManager.JavaClass.PERMISSION_GRANTED) or (TJEnvironment.JavaClass.isExternalStorageManager);

      if not optPermission then begin
         var Intent: JIntent;
         Intent := TJIntent.JavaClass.init;
         Intent.setAction(StringToJString('android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION'));
         Intent.setData(TJnet_Uri.JavaClass.fromParts(StringToJString('package'), TAndroidHelper.Context.getPackageName(), nil));
         if intent.resolveActivity(TAndroidHelper.Context.getPackageManager) <> nil then TAndroidHelper.Activity.startActivity(Intent);
      end;

   end else
     PermissionsService.RequestPermissions(
                      [ JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE),
                        JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE) ], nil);

end;

 

Спасибо за очередной пример, но на Андроид 14 он не приводит к положительным результатам.

Немного поясню. Разрешение я получаю, но работать с файлами все равно не могу. Ни найти, ни открыть, ни записать. Причем пробовал в разных папках: и GetPublicPath, и GetShareDocumentsPath и других.

Если есть еще необходимые действия с папками подскажите, пжл.

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

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

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

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

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

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

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

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

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

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

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