Перейти к содержанию
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

вообщем установка targetSdkVersion в 29 возвращает доступ ко всем файлам.

гугл здесь пишет, что достаточно MANAGE_EXTERNAL_STORAGE объявить, но нифига с targetSdk выше 29 не работает.

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

в некоторых прогах, типа x-plorer, заходишь в права и там три варианта выбора включая этот.

как оно у меня раньше было ума не приложу. но при выборе искало все файлы при sdk 32.

ну пока придется 29 апи писать.

на гитхабе ещё какой то код нашел, но вываливается с ошибкой

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

Ссылка на комментарий
  • 0
В 30.03.2023 в 04:42, Игорь Маринин сказал:

что достаточно MANAGE_EXTERNAL_STORAGE объявить

     try
     if TJBuild_VERSION.JavaClass.SDK_INT >= 30  then
        begin
           if TJEnvironment.JavaClass.isExternalStorageManager = false then
            begin

              Intent := TJIntent.Create;
              Intent:=  TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
              intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(TAndroidHelper.Context.getPackageName)));
              if intent.resolveActivity(TAndroidHelper.Context.getPackageManager) <> nil then
                 TAndroidHelper.Context.startActivity(Intent);

            end;
        end;
     except
     end;

     if TJBuild_VERSION.JavaClass.SDK_INT <= 29  then
        begin
            FPermissionReadExternalStorage := JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE);
            FPermissionWriteExternalStorage := JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE);

            PermissionsService.RequestPermissions([FPermissionReadExternalStorage] + [FPermissionWriteExternalStorage], nil);
        end;

Ссылка на комментарий
  • 0
uses
  Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Support, FMX.DialogService;

procedure RequestStoragePermission;
var
  Intent: JIntent;
begin
  if TJBuild_VERSION.JavaClass.SDK_INT >= 30 then
  begin
    if not TJEnvironment.JavaClass.isExternalStorageManager then
    begin
      Intent := TJIntent.Create;
      Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
      intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(TAndroidHelper.Context.getPackageName)));
      if intent.resolveActivity(TAndroidHelper.Context.getPackageManager) <> nil then
        TAndroidHelper.Context.startActivity(Intent);
    end;
  end
  else
  begin
    PermissionsService.RequestPermissions([JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE),
      JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE)],
      procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>)
      begin
        if (Length(AGrantResults) = 2) and (AGrantResults[0] = TPermissionStatus.Granted)
          and (AGrantResults[1] = TPermissionStatus.Granted) then
          TDialogService.ShowMessage('Permission granted')
        else
          TDialogService.ShowMessage('Permission denied');
      end);
  end;
end;

procedure CheckAndRequestStoragePermission;
begin
  if TJBuild_VERSION.JavaClass.SDK_INT >= 30 then
  begin
    if TJContextCompat.JavaClass.checkSelfPermission(TAndroidHelper.Context,
      JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE)) <> TJPackageManager.JavaClass.PERMISSION_GRANTED
      then
      RequestStoragePermission
    else
      TDialogService.ShowMessage('Permission granted');
  end
  else
  begin
    if (PermissionsService.IsPermissionGranted(JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE))
      and PermissionsService.IsPermissionGranted(JStringToString(TJManifest_permission.JavaClass.WRITE_EXTERNAL_STORAGE))) then
      TDialogService.ShowMessage('Permission granted')
    else
      RequestStoragePermission;
  end;
end;

 

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

спасибо! у вас 11.3 ?

не могли бы уточнить, где описан TJContextCompat?

а так же ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION ?

 

Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);

можно заменить на 

Intent.setAction(StringToJString('android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION'));  ?

 

 

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

спасибо! у вас 11.3 ?

не могли бы уточнить, где описан TJContextCompat?

а так же ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION ?

 

 

TJContextCompat - это статический класс из модуля Androidapi.JNI.Support. Он содержит статические методы, которые обеспечивают совместимость с разными версиями Android, в том числе методы для проверки и запроса разрешений.

ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION - это строковая константа, которая определяет действие Intent для отображения настроек разрешений приложения в Android 11 и выше. Она определена в классе android.provider.Settings и доступна через Androidapi.JNI.Provider в Delphi.

В вашем случае эта константа используется для запуска настроек разрешений на чтение и запись во внешнее хранилище приложения на Android 11 и выше. После запуска настроек пользователь может выдать необходимые разрешения для приложения.

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

Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);

можно заменить на 

Intent.setAction(StringToJString('android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION'));  ?

TJSettings.JavaClass.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION и android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION - это одно и то же действие Intent, которое открывает настройки разрешений для приложения на Android 11 и выше.

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

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

я понял, спасибо!

спрашивал потому, что у меня в Androidapi.JNI.Support нет TJContextCompat

ну и ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION то же нет нигде. но эту строковую константу я то могу заменить как писал  выше.

у меня 11.3, странно.. 

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

я понял, спасибо!

спрашивал потому, что у меня в Androidapi.JNI.Support нет TJContextCompat

ну и ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION то же нет нигде. но эту строковую константу я то могу заменить как писал  выше.

у меня 11.3, странно.. 

В версии Android API 28 (Android 9.0) и более новых версиях, класс TJContextCompat доступен в модуле Androidapi.JNI.Support.Compat, поэтому, для использования этого класса, вам нужно добавить этот модуль в uses секцию вашего кода.

Пример использования TJContextCompat для проверки разрешения:

uses
  Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Support.Compat, FMX.DialogService;

procedure CheckAndRequestStoragePermission;
begin
  if TJContextCompat.JavaClass.checkSelfPermission(TAndroidHelper.Context,
    JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE)) <> TJPackageManager.JavaClass.PERMISSION_GRANTED then
  begin
    TJActivityCompat.JavaClass.requestPermissions(TAndroidHelper.Activity,
      TJavaObjectArray<JString>.Create([TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE]),
      0);
  end
  else
    TDialogService.ShowMessage('Permission granted');
end;

Обратите внимание, что в этом примере мы также используем TJActivityCompat, чтобы запросить разрешение на чтение внешнего хранилища, если разрешение еще не выдано. Этот класс также находится в модуле Androidapi.JNI.Support.Compat.

 
Изменено пользователем Martifan
Ссылка на комментарий
  • 0

а такой код вообще не вызывает никакого диалога на 13 андроиде:

            if (TJBuild_VERSION.JavaClass.SDK_INT >= 30)  then  

            if (TJEnvironment.JavaClass.isExternalStorageManager = false) then  begin
                Intent := TJIntent.Create;
                Intent.setAction(StringToJString('android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION'));
                intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(TAndroidHelper.Context.getPackageName)));
                if (intent.resolveActivity(TAndroidHelper.Context.getPackageManager) <> nil) then TAndroidHelper.Context.startActivity(Intent);
            end;

 

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

а такой код вообще не вызывает никакого диалога на 13 андроиде:

            if (TJBuild_VERSION.JavaClass.SDK_INT >= 30)  then  

            if (TJEnvironment.JavaClass.isExternalStorageManager = false) then  begin
                Intent := TJIntent.Create;
                Intent.setAction(StringToJString('android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION'));
                intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(TAndroidHelper.Context.getPackageName)));
                if (intent.resolveActivity(TAndroidHelper.Context.getPackageManager) <> nil) then TAndroidHelper.Context.startActivity(Intent);
            end;

 

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

Поэтому, если экран настроек разрешений не открывается, это может означать, что у пользователя уже есть необходимые разрешения. Если вы хотите убедиться в этом, вы можете добавить проверку разрешения в ваш код, как я показал в предыдущем ответе.

if TJContextCompat.JavaClass.checkSelfPermission(TAndroidHelper.Context,
  JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE)) <> TJPackageManager.JavaClass.PERMISSION_GRANTED then
begin
  // Разрешение не выдано, запрашиваем его
  // ...
end
else
begin
  // Разрешение уже выдано
  // ...
end;

Если после проверки разрешения экран настроек разрешений все еще не открывается, проверьте, что вы используете правильное действие Intent. Вместо MANAGE_ALL_FILES_ACCESS_PERMISSION можно использовать другое действие, которое открывает экран настроек разрешений. Например, вы можете попробовать использовать ACTION_APPLICATION_DETAILS_SETTINGS.

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

спасибо!  Androidapi.JNI.Support.Compat

ну у меня в дельфи такого нет.. буду думать...

 

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

 

а вот эта проверка: if (TJEnvironment.JavaClass.isExternalStorageManager = false) 

разве не аналогична 

    if TJContextCompat.JavaClass.checkSelfPermission(TAndroidHelper.Context,
      JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE)) <> TJPackageManager.JavaClass.PERMISSION_GRANTED

 

буду искать ошибку. спасибо!

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

спасибо!  Androidapi.JNI.Support.Compat

ну у меня в дельфи такого нет.. буду думать...

Если у вас отсутствует модуль Androidapi.JNI.Support.Compat в вашей версии Delphi, то, вероятно, это связано с тем, что вы используете более старую версию Delphi, которая не включает этот модуль.

В этом случае вы можете попробовать использовать классы, доступные в модуле Androidapi.JNI.Support, например, TJContextCompatMarshmallow для проверки разрешения в Android 6.0 и выше.

uses
  Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Support;

procedure CheckAndRequestStoragePermission;
begin
  if TJContextCompatMarshmallow.JavaClass.checkSelfPermission(TAndroidHelper.Context,
    JStringToString(TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE)) <> TJPackageManager.JavaClass.PERMISSION_GRANTED then
  begin
    TJActivityCompatMarshmallow.JavaClass.requestPermissions(TAndroidHelper.Activity,
      TJavaObjectArray<JString>.Create([TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE]),
      0);
  end
  else
    TDialogService.ShowMessage('Permission granted');
end;

Обратите внимание, что класс TJActivityCompatMarshmallow используется для запроса разрешения на чтение внешнего хранилища. Если вы используете другое разрешение, вам нужно использовать соответствующий класс из Androidapi.JNI.Support

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

нашел такое, буду пробовать:

  Jcontent_ContextCompatClass = interface(JObjectClass)
    ['{DBBBF89C-A4F3-4A4C-A725-4B2FF89151B5}']
    {class} function checkSelfPermission(context: JContext; string_: JString): Integer; cdecl;



  Jcontent_PermissionCheckerClass = interface(JObjectClass)
    ['{4627A63C-3386-4ABA-83DD-08BAA19760C2}']
    {class} function checkPermission(context: JContext; string_: JString; i: Integer; i1: Integer; string_1: JString): Integer; cdecl;
    {class} function checkSelfPermission(context: JContext; string_: JString): Integer; cdecl;

спасибо! удачи!!!

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

вообщем по умолчанию, доступ к памяти запрещен:

TJEnvironment.JavaClass.isExternalStorageManager возвращает False

Intent.setAction(StringToJString('android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION'));

intent.resolveActivity(TAndroidHelper.Context.getPackageManager) возвращает NIL, (no activity found to handle Intent)

если вызвать при этом Intent := TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_APPLICATION_DETAILS_SETTINGS);

то общие настройки приложения открываются нормально.

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

if Androidapi.JNI.Support.TJcontent_ContextCompat.JavaClass.checkSelfPermission(TAndroidHelper.Context, TJManifest_permission.JavaClass.READ_EXTERNAL_STORAGE)  возвращает TJPackageManager.JavaClass.PERMISSION_GRANTED, но при этом приложение видит только стандартные расширения файлов.

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

почему активити 'android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION' отсутствует пока не пойму. на устройстве андроид 11-й.

и проверку наверное делать не на READ_EXTERNAL_STORAGE а на MANAGE_EXTERNAL_STORAGE, но в 11.3 его нет.

 

 

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

На Android 11 (API уровень 30) и выше, чтобы иметь полный доступ к внешнему хранилищу, вам нужно использовать разрешение MANAGE_EXTERNAL_STORAGE. Предоставление READ_EXTERNAL_STORAGE уже не даст полного доступа к файлам на устройстве.

Чтобы запросить разрешение MANAGE_EXTERNAL_STORAGE, выполните следующие шаги:

  1. В вашем файле AndroidManifest.xml, добавьте разрешение:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
  1. Запросите разрешение у пользователя. Для этого создайте новый Intent и установите соответствующее действие:
var
  Intent: JIntent;
begin
  Intent := TJIntent.JavaClass.init;
  Intent.setAction(TJSettings.JavaClass.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
  TAndroidHelper.Activity.startActivity(Intent);
end;
  1. Проверьте, предоставлено ли разрешение, используя метод Environment.isExternalStorageManager():
uses
  ...,
  Androidapi.JNI.App, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os;

function IsExternalStorageManager: Boolean;
begin
  Result := TJEnvironment.JavaClass.isExternalStorageManager(TAndroidHelper.Context);
end;

Обратите внимание, что MANAGE_ALL_FILES_ACCESS_PERMISSION доступно только на уровне API 30 и выше. Если ваше приложение также должно поддерживать более ранние версии Android, убедитесь, что вы проверяете версию Android перед вызовом этого кода:

uses
  ...,
  Androidapi.JNI.Os;

if TBuild_VERSION.JavaClass.SDK_INT >= 30 then
begin
  // Запросите разрешение MANAGE_EXTERNAL_STORAGE
end
else
begin
  // Запросите разрешение READ_EXTERNAL_STORAGE или WRITE_EXTERNAL_STORAGE
end;

По поводу отсутствия активити для действия android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION, возможно, это связано с конкретным устройством или версией Android. Вам может потребоваться использовать другой метод для запроса разрешения или обработать эту ситуацию соответствующим образом в вашем коде.

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

Да, вы правы. В Delphi, для проверки разрешений, можно использовать PermissionsService с методом IsEveryPermissionGranted. Это позволяет проверить, предоставлены ли все необходимые разрешения для приложения на устройстве пользователя.

Пример использования:

uses
  System.Permissions;

var
  Permissions: TArray<string>;
  PermissionGranted: Boolean;
begin
  Permissions := [TPermission.READ_EXTERNAL_STORAGE, TPermission.WRITE_EXTERNAL_STORAGE];
  PermissionGranted := TPermissionsService.IsEveryPermissionGranted(Permissions);

  if PermissionGranted then
    // Разрешения предоставлены, продолжаем выполнение
  else
    // Запрос разрешений от пользователя
end;

В этом примере проверяем разрешения на чтение и запись во внешнее хранилище. Если все разрешения предоставлены, приложение может продолжить работу, иначе, можно запросить эти разрешения у пользователя.

Однако, стоит отметить, что это применимо для платформы Android, когда вы используете Delphi для разработки приложений под мобильные устройства. В случае с Android, ранее мы использовали ContextCompat для проверки разрешений на доступ. Но с использованием Delphi, это становится неактуальным, так как Delphi предоставляет свою реализацию для проверки разрешений через PermissionsService.

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

  Intent := TJIntent.JavaClass.init;
  Intent.setAction(StringToJString('android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION'));
  TAndroidHelper.Activity.startActivity(Intent);

открывает форму установки прав, где есть и моё приложение.

но если добавить:

Intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(TAndroidHelper.Context.getPackageName)));

то intent.resolveActivity(TAndroidHelper.Context.getPackageManager) возвращает NIL.

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

апи 30. андроид 13. в манифесте указано <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

попробовал ещё PermissionsService.RequestPermissions(['MANAGE_ALL_FILES_ACCESS_PERMISSION'], ...

вообще никакой реакции..

Изменено пользователем Игорь Маринин
Ссылка на комментарий
  • 0

Ну так у вас ошибка вам нужно android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION для запроса на конкретное приложение, а android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION это меню для всех.

Intent := TJIntent.JavaClass.init;
  Intent.setAction(StringToJString('android.settings.MANAGE_ALL_FILES_ACCESS_PERMISSION'));
  TAndroidHelper.Activity.startActivity(Intent);

для всех

 

 

Intent := TJIntent.JavaClass.init;
  Intent.setAction(StringToJString('android.settings.MANAGE_APP_ALL_FILES_ACCESS_PERMISSION'));

Intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(TAndroidHelper.Context.getPackageName)));
  TAndroidHelper.Activity.startActivity(Intent);

Для вашего приложения

Изменено пользователем OnePeople
Ссылка на комментарий
  • 0

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

uses
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.Helpers;

procedure RequestAllFilesAccessPermission;
var
  Intent: JIntent;
  AppPackageName: JString;
begin
  Intent := TJIntent.JavaClass.init;
  Intent.setAction(TJSettings.JavaClass.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);

  // Замените 'your.package.name' на имя пакета вашего приложения
  AppPackageName := StringToJString('your.package.name');
  Intent.setData(TJnet_Uri.JavaClass.fromParts(TJString.JavaClass.init(StringToJString('package')), AppPackageName, nil));

  TAndroidHelper.Activity.startActivity(Intent);
end;

Замените 'your.package.name' на имя пакета вашего приложения. Этот код откроет экран настроек вашего приложения для запроса разрешения на доступ ко всем файлам.

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

Добрый всем день.

Очень полезная ветка. Воспользовался приведенными здесь способами.

Однако появился следующий вопрос.

Во время создания приложения (onCreate), я проверяю доступ к файлам и если его нет, то запрашиваю разрешение.

Проблема вот в чем. После запроса разрешения я не возвращаюсь в приложение.

Далее идет считывание собственно файлов при инициализации, а доступа к ним нет.

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

Помогите , пожалуйста, реализовать подобную штуку без перезапуска приложения. Не пойму куда копать...

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

Возобновлю ветку.

После обновления на Андроид 14  приведенные здесь способы перестали работать. Настройки стали "неактивны". Кто-нибудь решил такую проблему?

 

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

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

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

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

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

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

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

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

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

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

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