Саша Опубликовано 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? Цитата Ссылка на комментарий
1 krapotkin Опубликовано 11 августа, 2023 Поделиться Опубликовано 11 августа, 2023 да Цитата Ссылка на комментарий
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 и невидимостью телефона? Спасибо! Цитата Ссылка на комментарий
1 krapotkin Опубликовано 12 августа, 2023 Поделиться Опубликовано 12 августа, 2023 User PATH Цитата Ссылка на комментарий
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 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.