• 0
R.is

Проблемы после изменения targetSdkVersion

Вопросы

Господа, нужна помощь.

Запилил приложение, протестировал, все работает на ура и радостный иду загружать в Google Play, по требованию Google Play перед загрузкой в  AndroidManifest.template.xml нужно поставить targetSdkVersion не ниже 26.

Как только ставлю targetSdkVersion="26", то  некоторые функции приложения перестают работать, а если обратно изменить  targetSdkVersion на 16, то все начинает работать.

В чем может быть проблема?

 

1) Кнопка "Поделиться" - использую стандартный ActionList

procedure TForm2.ShowShareSheetAction1BeforeExecute(Sender: TObject);
begin
  ShowShareSheetAction1.Bitmap.Assign(Image1.Bitmap);
end;

 и получаю вот что: 

Спойлер

1542886559245.thumb.JPEG.63006d3f56fb3376f19a1b41ceedf7a5.JPEG

2) Кнопка "Сохранить" - сохраняю картинку в папку Pictures:

Uses Permissions:

Read external storage = true

Write external storage = true

procedure TForm2.Button2Click(Sender: TObject);
begin
Image1.Bitmap.SaveToFile(TPath.Combine(TPath.GetSharedPicturesPath,'phone.jpg'));
end;

и получаю следующую ошибку

Спойлер

1542886610498.thumb.JPEG.627700758f6c2e6a4fa8e34556a91133.JPEG

 

Прикрепляю тестовый проект.

demo.rar

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


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

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

  • 0
35 минут назад, R.is сказал:

Кнопка "Сохранить" - сохраняю картинку в папку Pictures:

В 26 Апи новая модель разрешений.
То, что права прописаны в манифесте больше не означает что они выдаются по умолчанию.
Нужно спрашивать у пользователя права и только потом сохранять.
Здесь подробнее
Там же есть ссылка на гитхаб, на гитхабе лежит готовый РАБОТАЮЩИЙ пример.

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

PS да, мы не используем в наших приложениях "поделиться" 😃 

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


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

Спасибо за ответ. 

Установил 10.3, там добавили System.Permissions, который решает проблему. 

Изменено пользователем R.is

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


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

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

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

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

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

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

Войти

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

Войти

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

    • От x11
      Если установлена версия (Rev) 25.0.3 то можно ли удалять предыдущие: 25, 25.0.1 и 25.0.2?
       

    • От x11
      Не знаю, может глупый вопрос задам. Виной тому - понедельник
      Если приложение должно запускаться и на Android 4, и на Android 5, 6, 7.
      Нужно ли и как правильно быть с SDK?
       
      Или каждый раз менять в приложении SDK и пересобирать проект и тогда APK как-то именовать?
    • От x11
      Delphi Tokyo не видит устройство. Нажимаю Refresh там, где Target в менеджере проекта, появляется сообщение:
       
      Что не так?
      Что нужно доустановить?



    • От Belov.V.
      Предлагаю поделиться практикой сборки приложений под Linux, набором ошибок и глюков.
      Решил сделать пару экспериментов в связке RAD-Linux.
      1) Есть рабочий Debian7. На нем не пошел PAServer. Требует glib версии 2.14 или 2.17 (на 7-ке 2.12). Добавил в репозиторий ссылку на пакеты от debian 8. Обновил. PAServer стартует, но тут же валится по ошибке сокета (не записал как звучит). Пока все пакеты подряд.
      2) Поднял Debian8. Чистый.
      PAServer стартует, SDK в RAD студию загружается. При попытке сборки ошибка "[DCC Error] E2597 C:\Program Files (x86)\Embarcadero\Studio\19.0\bin\ld-linux.exe: error: cannot find -lgcc_s" При обновлении кеша файлов SDK ругается: Directory does not exist: /usr/include/c++/ Directory does not exist: /usr/include/x86_64-linux-gnu/ (исчезла после gcc-6) Directory does not exist: /usr/include/x86_64-linux-gnu/c++/ Directory does not exist: /usr/include/c++/ Directory does not exist: /usr/lib/gcc/x86_64-redhat-linux/ Directory does not exist: /usr/lib/gcc/x86_64-redhat-linux/ Directory does not exist: /usr/lib64/ Доставил пакеты gcc-6 и linux-compiler-gcc-6-x86, обновил файлы кеша SDK (исчезла вторая строчка в предупреждении при обновлении). Ура!  Простейший пример собирается и стартует. Под отладчиком работает. Но остались шесть предупреждений при обновлении linux SDK.
      Где это может вылезти?
    • От chaplin.u@gmail.com
      Освежите в памяти для того чтобы аппликация была совместима с Лоллипопом ( Андроид 5) какие версии SDK NDK должны стоять ?
       
    • От chaplin.u@gmail.com
      Не могу запустить приложение на Маке. Какие-то проблемы с sdk .
      Во-первых почему-то создаётся СДК для бета версии MacOSX10.12.sdk а на моём Маке стоит 10.11 . Где взять sdk на 10.11 ?
      Во-вторых прописаны несуществующие директории :
      [bccosx Warning] W8123 Path 'C:\Users\Documents\Embarcadero\Studio\SDKs\MacOSX10.12.sdk/System/Library/Frameworks' not found 
      [bccosx Warning] W8123 Path 'C:\Users\Documents\Embarcadero\Studio\SDKs\MacOSX10.12.sdk/System/Library/PrivateFrameworks' not found - 
      Что там должно быть и где взять эти файлы
      В-третьих в файле  sysmac.h  написано :
      #if !defined(TARGET_OS_IPHONE) && !defined(TARGET_IPHONE_SIMULATOR)
            #pragma option push -w-8017  // Workaround redefinition of NSEC_PER_USEC and USEC_PER_SEC
            #include <CoreServices/CoreServices.h>
      А этих директорий у меня тоже нет ...
       
       
       
       
    • От masmat
      Всех с Новым годом!.
       
      Не могу понять в чем ошибка. Значит по порядку
       
      1. Есть рецепт настройки проекта для запуска на iOS, ссылку не буду приводить, дабы не нарушать правила.
      2. Все настроил, iPhone виден в Delphi как устройство для отладки.
      3. Запускаю отладку и получаю вот такие ошибки. Путь "Local root directory" был и по умолчанию, и указывал его абсолютным, не помогает
       
       
       
      4. Когда обновить файлы локально

       
      То получаю вот такую ошибку

       
      И всё, дальше тупик. Не могу понять в чем дело.
      ПО последних версий
      Windows Embarcadero® Delphi XE8 Version 22.0.19908.869 + Update 1 MAC OS X EI Capitan на физическом MAC SDK 9.2 XCode 7.2 PA Server 16.0  
       
       
    • От Дениска
      Господа! Тема очень важная.
      Как использовать сторонние нативные (написанные на Obj-C) фреймворки и SDK в Firemonkey (не дописана).
       
      Имеется SDK, включающий статическую библиотеку, заголовок к ней и кучу классов упрощающих работу с библиотекой.
      libSDK.a SDK.h class1.h class1.m class2.h class3.m ... classN.h classN.m Чтобы упростить себе жизнь, немного покопавшись:
      www.youtube.com/watch?v=f7lxkv-sZA0 www.youtube.com/watch?v=5cnY8WNKRwg ... я собрал из этой кучи файлов одну статическую библиотеку MyLib.a.
      (Кому нужно знать как это делается, спрашивайте. Это отдельная тема.)
       
      Как заверяют разработчики этого SDK, для использования этой библиотеки необходимо подключить пару нативных фреймворков и две динамические библиотеки:
      SystemConfiguration.framework CoreTelephony.framework libstdc++.dylib libz.dylib Фреймворки стандартные и уже реализованы в RAD Studio, а библиотеки присутствуют в скачиваемом IOS SDK по пути:
      C:\Users\Username\Documents\Embarcadero\Studio\SDKs\iPhoneOS9.0.sdk\usr\lib.
       
      Embarcadero "побеспокоилась" о подключении сторонних статических библиотек. Создаётся функция (пример взят из сканера баркодов):
       
      implementation
        procedure FakeLoader(произвольное имя); cdecl; external 'MyLib.a' name 'OBJC_CLASS_$_MyClass'; 
       
      Реальная польза этой функции для меня остаётся загадкой, кроме того, что без неё приложение не увидит библиотеки и при попытки обратится к классу выдаст: "ObjectiveC class MyClass could not be found".
       
      Для начала я создал на XCode libHelloWorld.a (думаю не нужно говорить, что она делает).
      Немного покопавшись:
      ridingdelphi.blogspot.com/2014/01/the-quest-to-migrate-ios-squarecam-app_3169.html blog.blong.com/2013/05/delphi-for-ios-some-notes.html написал хедер HelloWorld.pas, в котором описал классы и функции хранящиеся в этой библиотеке. Подключил pas в uses  в проекте и всё заработало.
      (Кому нужно знать как это делается, спрашивайте. Это отдельная тема.).
      Решил теперь подключить мою MyLib.a, которую я создал из основе SDK, можно сказать конвертировал. Но она требует две динамические библиотеки, что в случае с HelloWorld не требовалось.
       
      Как подсказывает Embarcadero, мне нужно дописать в мой FakeLoader директиву dependency. Итого:
        procedure FakeLoader; cdecl; external 'MyLib.a' name 'OBJC_CLASS_$_MyClass'
        dependency 'libstdc++.dylib', 'libz.dylib';
       
      Но вот тут и нужна Ваша помощь!
       
      Я помещал эти библиотеки прямо в проект, указывал абсолютные пути из MacPC и из моего PC, копировал оригинальные библиотеки из MacPC, писал их с расширением и без, с префиксом "lib" и без. IDE твердит одно:
           [DCC Error] E2597 ld: library not found for -llibz.dylib    [DCC Error] E2597 ld: library not found for -llibstdc++.dylib  
      Без этих библиотек моя статическая библиотека MyLib.a не компилируется с ошибками:
            Error: "blablabla", referenced from: lalalala in MyLib.a(Class1.o);  lalalala in MyLib.a(Class1.o);      Error: "qwertyuui", referenced from: olololo in MyLib.a(Class2.o);  olololo in MyLib.a(Class2.o);      Error: "abracadabra", referenced from: abcdefjgh in MyLib.a(Class3.o);  abcdefjgh in MyLib.a(Class3.o);    ...   Кто сталкивался? Кто знает чем помочь? Пишите. Сейчас мой проект простаивает из-за этой проблемы.  
    • От Brovin Yaroslav
      Как установить предыдущую версии SDK и симуляторов?
       
      Зачастую Apple меняет требования к процедуре запуска приложений на новых версиях iOS. Для сохранения совместимости с RAD Studio и не потерять возможность отладки и запуска приложений требуется установить предыдущую версию симулятора или SDK.
  • Последние посетители   0 пользователей онлайн

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