Саша Опубликовано 9 августа, 2023 Опубликовано 9 августа, 2023 (изменено) Здравствуйте, люди добрые! Помогите, пожалуйста, разобраться. Мне надо банально получить координаты своего местоположения. Делаю так: Form1.LocationSensor1.Active := true; // * 1 В следующем событии получаю координаты: procedure TForm1.LocationSensor1LocationChanged(Sender: TObject; // * 2 const OldLocation, NewLocation: TLocationCoord2D); begin LbPoint.Text:=''Проход 4; // * 3 ... ... end; В Android 10 работает отлично. В Android 13 приложение вылетает, будто его не запускали. Вылетает, скорее всего, здесь // * 2, так как // * 3 уже не срабатывает. Спасибо! Изменено 9 августа, 2023 пользователем Саша Цитата
1 krapotkin Опубликовано 10 августа, 2023 Опубликовано 10 августа, 2023 а отладчик что говорит? молча вылетает? в таком случае что говорит logCat ? Цитата
0 Саша Опубликовано 10 августа, 2023 Автор Опубликовано 10 августа, 2023 С эмулятором я не работаю. У меня подключен Android 10 по USB. После установки приложение запускается на этом телефоне (Android 10) и работает нормально. Затем APK я устанавливаю на Android 13. И там вылетает. Цитата
0 Саша Опубликовано 10 августа, 2023 Автор Опубликовано 10 августа, 2023 У меня версия 10.4 Sydney. Может быть в этом проблема (здесь скриншот)? Если да, то как ее решить? Цитата
1 krapotkin Опубликовано 10 августа, 2023 Опубликовано 10 августа, 2023 про эмулятор не было речи чтобы решить проблему нужна отладка на целевом устройстве если есть возможность - подключаем его под отладчиком если нет - печалька, идем в AndroidSDK -- Tools -- monitor.bat и учимся работать с LogCat погуглите, что это и как там ловить ошибку я подозреваю, что на Android 13 появились новые разрешения, которые надо запросить у пользователя, чтобы получить доступ к Location Цитата
0 Саша Опубликовано 10 августа, 2023 Автор Опубликовано 10 августа, 2023 7 минут назад, krapotkin сказал: я подозреваю, что на Android 13 появились новые разрешения, которые надо запросить у пользователя, чтобы получить доступ к Location Спасибо! Но я же в телефоне настраиваю разрешение местоположения. Надо еще как-то запрашивать? А версия моего SDK подходит? Цитата
1 krapotkin Опубликовано 10 августа, 2023 Опубликовано 10 августа, 2023 не касался давно работы с сенсорами, но начал бы гуглить именно permission changes from android 12 to 13 непосредственно к делфи это отношения не имеет https://developer.android.com/about/versions/13/behavior-changes-13 https://developer.android.com/training/location/background Цитата
1 krapotkin Опубликовано 10 августа, 2023 Опубликовано 10 августа, 2023 https://developer.android.com/training/location/permissions Цитата
0 Саша Опубликовано 10 августа, 2023 Автор Опубликовано 10 августа, 2023 Спасибо! Буду пробовать. Потом напишу - что получилось. Только я не знаю, куда вписать эти две строки: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ,так как в моем мнифесте уже есть <%uses-permission%>. Мой манифест. <?xml version="1.0" encoding="utf-8"?> <!-- BEGIN_INCLUDE(manifest) --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="%package%" android:versionCode="%versionCode%" android:versionName="%versionName%" android:installLocation="%installLocation%"> <uses-sdk android:minSdkVersion="%minSdkVersion%" android:targetSdkVersion="%targetSdkVersion%" /> <%uses-permission%> <uses-feature android:glEsVersion="0x00020000" android:required="True"/> <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" android:icon="%icon%" android:theme="%theme%" android:hardwareAccelerated="%hardwareAccelerated%" android:resizeableActivity="false" android:requestLegacyExternalStorage="true"> <%provider%> <%application-meta-data%> <%uses-libraries%> <%services%> <!-- Our activity is a subclass of the built-in NativeActivity framework class. This will take care of integrating with our NDK code. --> <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity" android:label="%activityLabel%" android:configChanges="orientation|keyboard|keyboardHidden|screenSize" android:launchMode="singleTask"> <!-- Tell NativeActivity the name of our .so --> <meta-data android:name="android.app.lib_name" android:value="%libNameValue%" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <%activity%> <%receivers%> </application> </manifest> <!-- END_INCLUDE(manifest) --> Цитата
1 krapotkin Опубликовано 10 августа, 2023 Опубликовано 10 августа, 2023 большинство декларируемых разрешений попадают в манифест неявно отсюда https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Uses_Permissions как раз на место <%uses-permission%> иногда бывают вещи, которые надо вручную вписать в этот шаблон манифеста и потом еще не забыть запросить разрешение непосредственно перед доступом к защищаемому сервису https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Android_Permission_Model в Д11 механизм разрешений менялся, что конкретно, сказать не могу, но синтаксис был изменен возможно, для соответствия каким-либо новым требованиям гугл Цитата
0 Саша Опубликовано 10 августа, 2023 Автор Опубликовано 10 августа, 2023 11 минут назад, krapotkin сказал: возможно, для соответствия каким-либо новым требованиям гугл А требования гугл к распространению приложений через PlayMarket? Если это так, то у меня нет цели работать на продажу и не будет. Цитата
0 Саша Опубликовано 10 августа, 2023 Автор Опубликовано 10 августа, 2023 Спасибо за то, что ткнули меня где надо копать! Добавил две строки в манифест. Добавил запрос отсюда: https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Android_Permission_Model Кстати, там синтаксическая ошибка. Пришлось перекроить, сохранив при этом смысл изложенного. В меню Android 10 (где и так все работает) запрещаю доступ к местоположению. Запускаю программу, появляется диалоговое окно запроса. В этом окне даю разрешение. В меню Android 10 проверяю настройку. Настройка установлена как надо. Приложение работает. Но ведь и в Android 13 появится точно такой же запрос. И настройка установится. Тогда какая разница: установлю я эту настройку из окна или из меню? Жду, когда доберусь Android 13. Цитата
1 krapotkin Опубликовано 10 августа, 2023 Опубликовано 10 августа, 2023 3 часа назад, Саша сказал: требования гугл к распространению приложений через PlayMarket совсем не обязательно меняется в сторону усиления ограничений вообще все - даже доступ к файлам, которые записали другие программы, получить теперь не так просто Цитата
0 Саша Опубликовано 10 августа, 2023 Автор Опубликовано 10 августа, 2023 4 минуты назад, krapotkin сказал: меняется в сторону усиления ограничений Да! Я даже не могу из своей программы работать с теми папками, с которыми хочу. А только с определенными. Но меня (пока?) это устраивает. Отвлекся от темы. А что касается сенсора, то такое ощущение, что в прграммах на JAVA он работает точнее. Но меня и этаточность устраивает. И еще про манифест и разрешения. Получается, что разрешения в манифесте главней, чем разрешения в меню андроида??? Цитата
1 krapotkin Опубликовано 11 августа, 2023 Опубликовано 11 августа, 2023 манифест - это не разрешения там описаны те вещи, с которыми собирается работать программа чтобы работать с чувствительными ресурсами, требуется явно получить разрешение. Оно хранится в базе данных ОС. Может быть отозвано. Поэтому нужно запрашивать его каждый раз заново. Если в БД есть, то запрос пройдет скрыто, если нет, то появится сообщение для пользователя Цитата
0 Саша Опубликовано 11 августа, 2023 Автор Опубликовано 11 августа, 2023 (изменено) Забегая наперед, скажу, что все эти процедуры не помогли: на Android 13 так и не работает, вываливается. При первом запуске программы (после установки) запрос для пользователя появляется. Эффект от ответа на этот запрос такой же, что и от соотсветствующей ручной настройки в меню андроида. При следующих запусках запрос не появляется. И что меня еще удивило. После установки этого приложения c измененным манифестом на Android 10 (с Location там проблем не было и нет) пропал доступ к интернету из этого приложения. Приложение обращалось к FTP-серверу. Проблема решилась добавлением в манифест вот такой строки:<uses-permission android:name="android.permission.INTERNET" /> Подозрение у меня на версию SDK. Посмотрите, пожалуйста мой вчерашний (10.08.2023 17:34) скриншот SDK Mahager. Там красная черта и написано android-29. Может быть Android 13 не от этого SDK? Спасибо! Вот здесь https://learn.microsoft.com/ru-ru/xamarin/android/app-fundamentals/android-api-levels?tabs=windows#android-versions-and-api-levels еесть таблица, из которой видно, что API 29 - это Android 10. Изменено 11 августа, 2023 пользователем Саша Цитата
1 krapotkin Опубликовано 11 августа, 2023 Опубликовано 11 августа, 2023 короче, все проще, как всегда я уже и забыл про это: https://docwiki.embarcadero.com/RADStudio/Sydney/en/Android_Devices_Supported_for_Application_Development для А13 используйте Д11 и выше Цитата
0 Саша Опубликовано 11 августа, 2023 Автор Опубликовано 11 августа, 2023 Д11 - это Delphi 11.3? Цитата
0 Саша Опубликовано 11 августа, 2023 Автор Опубликовано 11 августа, 2023 Печаль! Наша организация приобрела за бешенные деньги 10.4 Sydney, которую мы используем под Windows. И ради того, чтобы я в личных целях писал под Android 13 новую версию не купят. Цитата
0 Саша Опубликовано 11 августа, 2023 Автор Опубликовано 11 августа, 2023 Какая-то вакханалия. Установил 11.3. SDK (33) не устанавливается. Файл aapt.exe не находит (и не только его), базовые папки полупустые. Калечная установка. Можно как нибудь скормить SDK из Android Studio? Цитата
1 krapotkin Опубликовано 11 августа, 2023 Опубликовано 11 августа, 2023 я всегда "кормлю" только из AS в SDK Manager установить галочки напротив НУЖНЫХ версий, тех, которые Делфи ставит для этого нужно перейти в расширенный режим, с деталями, не помню как он там называется, там выбрать, и установить так же и NDK Очень рекомендую по коротким путям SDK/NDK ставить После этого просто нужные папочки указать в настройках SDK в Делфи Цитата
0 Саша Опубликовано 11 августа, 2023 Автор Опубликовано 11 августа, 2023 Установил SDK по короткому пути в C:\SDK. Прописал папки. Совет дельный. Прописал пути. Вот что получилось. Когда нажимаю SAVE, то с тупостью осла (осел обидится) меняются пути, пояляются восклицательные знаки и вот такое сообщение. Когда нажиаю OK это все уходит, но при повторном входе в SDK MANAGER пути как на первом изображении. То есть, сохраняются. NDK установлено по километровым путям, но без восклицательныйх знаков. Установилось с установкой Д11.4. Стоит ли установить в C:\NDK. Если да, то как? JAVA установлена сюда. И еще такие проблемы. Телефон не видит. При компиляции выдает ошибку ERROR: E7684 Could not find program 'C:\bin\java.exe'. Там у меня сроду JAVы не было и все работало. Правильно ли я выполнил установку. Как решить проблему с ошибкой JAVA и невидимостью телефона? Спасибо! Цитата
0 Саша Опубликовано 12 августа, 2023 Автор Опубликовано 12 августа, 2023 Упорно при компиляции выдает ошибку ERROR: E7684 Could not find program 'C:\bin\java.exe'. Переменную среды поменял. Телефон не видит. Правда, все остальное я еще не настраивал. Цитата
1 krapotkin Опубликовано 12 августа, 2023 Опубликовано 12 августа, 2023 вот и задайтесь вопросом, где в настройках есть путь C:\bin\java.exe что у вас на вкладке Java в Delphi SDK Manager ? Цитата
Вопрос
Саша
Здравствуйте, люди добрые! Помогите, пожалуйста, разобраться.
Мне надо банально получить координаты своего местоположения.
Делаю так:
Form1.LocationSensor1.Active := true; // * 1
В следующем событии получаю координаты:
procedure TForm1.LocationSensor1LocationChanged(Sender: TObject; // * 2
const OldLocation, NewLocation: TLocationCoord2D);
begin
LbPoint.Text:=''Проход 4; // * 3
...
...
end;
В Android 10 работает отлично.
В Android 13 приложение вылетает, будто его не запускали. Вылетает, скорее всего, здесь // * 2, так как // * 3 уже не срабатывает.
Изменено пользователем СашаСпасибо!
34 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.