• 0
Barbanel

Запрос "опасных" разрешений в рантайме

Вопросы

Всем привет!

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

Умные люди говорят (и даже дают ссылку), что начиная с апи примерно 22, для того чтобы писать на карту памяти нужно просить у пользователя разрешение.

https://stackoverflow.com/questions/33139754/android-6-0-marshmallow-cannot-write-to-sd-card

Есть пример на Java, но я понятия не имею как это сделать на Delphi. Насколько я понимаю, выполнть Java-код из Delphi невозможно, так?

Есть ли какой обходной путь, или встроенная возможность как запросить права у пользователя?

Всем заранее спасибо!

Изменено пользователем Barbanel
грамматика

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 ответов на этот вопрос

  • 0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 минуту назад, Andrey Efimov сказал:

Андрей, огромное спасибо!

Уже разбираемся.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 22.01.2018 в 20:54, Barbanel сказал:

Андрей, огромное спасибо!

Уже разбираемся.

Сработало? Поделитесь плиз впечатлениями

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
14 минут назад, DMS сказал:

Сработало? Поделитесь плиз впечатлениями

Делюсь , сделали у себя все норм. Андрею спасибо. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
Только что, FREEFAR сказал:

Делюсь , сделали у себя все норм. Андрею спасибо. 

Частично. Диалог запроса появляется, но при копировании файла на карту все равно вылетает исключение.

А как вы это делаете?

PS возможно, дело в моем тестовом устройстве. Huawei P8 lite и Huawei P9. Других железок с картой памяти под рукой нет(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 час назад, Barbanel сказал:

Частично. Диалог запроса появляется, но при копировании файла на карту все равно вылетает исключение.

А как вы это делаете?

PS возможно, дело в моем тестовом устройстве. Huawei P8 lite и Huawei P9. Других железок с картой памяти под рукой нет(

Мы пошли путем другим. Мы все права спросили сразу после первого запуска. Пока вроде проблем нет. Одно мне не нравится мы просим права на статус телефона чтобы получить deviceID но он в диалоге пишет "Чтобы совершать звонки"... бред...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От denprox
      Доброго времени суток! Поиск по форуму не дал результатов, по этому решил спросить сам. Каким образом возможно реализовать возможность изменения размеров у некоторых объектов таким же образом, как и в дизайнере. Т.е. при выделении (клике) по объекту, активировать рамку объекта с кружочками, потянув за которые можно изменить размер ? 
    • От notricky
      Почему-то код, исправно работающий для WIN, не работает на ANDROID.
      procedure AssignEventToComponent(C: TComponent; MethodName: String; const Evt: TNotifyEvent; OnlyIfNil: boolean = true); var M: TMethod; begin M := GetMethodProp(C,MethodName); if not OnlyIfNil or (M.Code = nil) then begin TNotifyEvent(M) := Evt; SetMethodProp(C,MethodName,M); end; end; Есть какие-то особенности работы TMethod для ANDROID?
    • От Alesk
      Как подключить gesturemanager1 к кнопке созданной в runtime?
      Когда пишу эту строчку
      izm[ii].Touch.GestureManager:=GestureManager1; ругается на Gesturemanager1
      izm[ii] - массив из tbutton
    • От Alesk
      Фрагмент кода:
      nad[g]:= tlabel.Create(tabbedwithnavigationform.label1); nad[g].BeginUpdate; nad[g].Size.height:=24; nad[g].Size.Width:=350; nad[g].Text:=we; nad[g].position.y:=-99; nad[g].Align:=talignlayout.Top; nad[g].FontColor:=$FFFEFEFE; nad[g].EndUpdate; nad[g].Parent:= pod[g]; где nad[g] - массив из tlabel, а pod[g] - массив из tlistview
      Нужно чтобы при создании цвет текста становился белым, но почему-то не работает, цвет остается черным
    • От Rusland
      Как изменить родителя у компонента? Например, Image1 лежит на Layout1. Как его программно перенести на Layout2?
    • От Рагим
      Добрый день.
       
      Столкнулся с проблемой. Приложение изначально писал на XE6, потом перенес на XE7 - все работало без проблем. Обновился до XE8 и код перестал работать. Причем никаких ошибок не выкидывает. Просто зависает не отрабатывает процедура. Прошу не бить ногами за дилетантский код. Главное до этого нормально работал. Суть такая: есть два приложения под Андроид. Связаны между собой по сети. Назовем их сервер и клиент (вернее 4 клиента). Одно из них посылает сообщение на другой и при получении сообщения должна отрабатывать эта процедура. Взависимости от того кто и когда послал сообщение, появляются разные картинки. 
       
      procedure TForm1.ShowPlus(a,b:byte); //a - Номер строки //b - Цвет команды begin  but[a]:=b;  case a of   1: begin       case b of        1: begin            form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');            form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');           end;        2: begin            form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');            form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');           end;        3: begin            form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');            form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');           end;        4: begin            form1.PlusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');            form1.MinusImage1.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');           end;       end;      end;   2: begin       case b of        1: begin            form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');            form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');           end;        2: begin            form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');            form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');           end;        3: begin            form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');            form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');           end;        4: begin            form1.PlusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');            form1.MinusImage2.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');           end;       end;      end;   3: begin       case b of        1: begin            form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');            form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');           end;        2: begin            form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');            form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');           end;        3: begin            form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');            form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');           end;        4: begin            form1.PlusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');            form1.MinusImage3.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');           end;       end;      end;   4: begin       case b of        1: begin            form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bplus.png');            form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'bminus.png');           end;        2: begin            form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yplus.png');            form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'yminus.png');           end;        3: begin            form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gplus.png');            form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'gminus.png');           end;        4: begin            form1.PlusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rplus.png');            form1.MinusImage4.Bitmap.LoadFromFile(System.IOUtils.TPath.GetDocumentsPath + PathDelim+'rminus.png');           end;       end;      end;  end; end;  
      Буду рад любой помощи в исправлении ошибок или оптимизации кода.
    • От FreeOS
      Как создавать(ну и удалять,изменять) примитивные 3D фигуры (например Rectangle3D, Cube, Sphere ...) в runtime-ме в большом количестве.
      То есть я не знаю сколько мне надо фигур заранее.
       
      За ранее СПАСИБО
  • Последние посетители   0 пользователей онлайн

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