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

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


Barbanel

Вопрос

Всем привет!

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

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

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

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

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

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

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

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

  • 0
Только что, FREEFAR сказал:

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

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

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

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

Ссылка на комментарий
  • 0
1 час назад, Barbanel сказал:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • Автор 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 пользователей онлайн

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

×
×
  • Создать...