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

На Android 13 не работает LocationSensor.


Саша

Вопрос

Здравствуйте, люди добрые! Помогите, пожалуйста, разобраться.

Мне надо банально получить координаты своего местоположения.
Делаю  так:

    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 уже не срабатывает.
Спасибо!

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

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

  • 0

С эмулятором я не работаю. У меня подключен Android 10 по USB. После установки приложение запускается на этом телефоне (Android 10) и работает нормально. Затем APK я устанавливаю на Android 13. И там вылетает.

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

про эмулятор не было речи
чтобы решить проблему нужна отладка на целевом устройстве
если есть возможность - подключаем его под отладчиком
если нет - печалька, идем в AndroidSDK -- Tools -- monitor.bat и учимся работать с LogCat
погуглите, что это и как там ловить ошибку

я подозреваю, что на Android 13 появились новые разрешения, которые надо запросить у пользователя, чтобы получить доступ к Location

 

Ссылка на комментарий
  • 0
7 минут назад, krapotkin сказал:

я подозреваю, что на Android 13 появились новые разрешения, которые надо запросить у пользователя, чтобы получить доступ к Location

Спасибо! Но я же в телефоне настраиваю разрешение местоположения. Надо еще как-то запрашивать?

А версия моего SDK подходит?

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

не касался давно работы с сенсорами, но начал бы гуглить именно permission changes from android 12 to 13

непосредственно к делфи это отношения не имеет

https://developer.android.com/about/versions/13/behavior-changes-13

https://developer.android.com/training/location/background

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

 

Спасибо! Буду пробовать. Потом напишу - что получилось.

Только я не знаю, куда вписать эти две строки:

<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

большинство декларируемых разрешений попадают в манифест неявно отсюда

https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Uses_Permissions

как раз на место 

    <%uses-permission%>

иногда бывают вещи, которые надо вручную вписать в этот шаблон манифеста

и потом еще не забыть запросить разрешение непосредственно перед доступом к защищаемому сервису

https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Android_Permission_Model

в Д11 механизм разрешений менялся, что конкретно, сказать не могу, но синтаксис был изменен

возможно, для соответствия каким-либо новым требованиям гугл

Ссылка на комментарий
  • 0
11 минут назад, krapotkin сказал:

возможно, для соответствия каким-либо новым требованиям гугл

А требования гугл к распространению приложений через PlayMarket?

Если это так, то у меня нет цели работать на продажу и не будет.
 

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

Спасибо за то, что ткнули меня где надо копать!

Добавил две строки в манифест.

Добавил запрос отсюда: https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Android_Permission_Model

Кстати, там синтаксическая ошибка. Пришлось перекроить, сохранив при этом смысл изложенного.

В меню Android 10 (где и так все работает) запрещаю доступ к местоположению. Запускаю программу, появляется диалоговое окно запроса.

В этом окне даю разрешение. В меню Android 10 проверяю настройку. Настройка установлена как надо. Приложение работает.

Но ведь и в Android 13 появится точно такой же запрос. И настройка установится. Тогда какая разница: установлю я эту настройку из окна или из меню?

Жду, когда доберусь Android 13.

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

требования гугл к распространению приложений через PlayMarket

совсем не обязательно

меняется в сторону усиления ограничений вообще все - даже доступ к файлам, которые записали другие программы, получить теперь не так просто

 

Ссылка на комментарий
  • 0
4 минуты назад, krapotkin сказал:

меняется в сторону усиления ограничений

 

Да! Я даже не могу из своей программы работать с теми папками, с которыми хочу. А только с определенными. Но меня (пока?) это устраивает. Отвлекся от темы.
А что касается сенсора, то такое ощущение, что в прграммах на JAVA он работает точнее. Но меня и этаточность устраивает.

И еще про манифест и разрешения. Получается, что разрешения в манифесте главней, чем разрешения в меню андроида???

 

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

манифест - это не разрешения

там описаны те вещи, с которыми собирается работать программа

чтобы работать с чувствительными ресурсами, требуется явно получить разрешение. Оно хранится в базе данных ОС. Может быть отозвано. Поэтому нужно запрашивать его каждый раз заново. Если в БД есть, то запрос пройдет скрыто, если нет, то появится сообщение для пользователя

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

Забегая наперед, скажу, что все эти процедуры не помогли: на 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.

Изменено пользователем Саша
Ссылка на комментарий
  • 1

короче, все проще, как всегда

я уже и забыл про это:

https://docwiki.embarcadero.com/RADStudio/Sydney/en/Android_Devices_Supported_for_Application_Development

для А13 используйте Д11 и выше

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

Печаль! Наша организация приобрела за бешенные деньги 10.4 Sydney, которую мы используем под Windows. И ради того, чтобы я в личных целях писал под Android 13 новую версию не купят.

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

Какая-то вакханалия. Установил 11.3. SDK (33) не устанавливается. Файл aapt.exe не находит (и не только его), базовые папки полупустые. Калечная установка. 

Можно как нибудь скормить SDK из Android Studio?

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

я всегда "кормлю" только из AS

в SDK Manager установить галочки напротив НУЖНЫХ версий, тех, которые Делфи ставит

для этого нужно перейти в расширенный режим, с деталями, не помню как он там называется, там выбрать, и установить

так же и NDK

Очень рекомендую по коротким путям SDK/NDK ставить

После этого просто нужные папочки указать в настройках SDK в Делфи

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

Установил SDK по короткому пути в C:\SDK. Прописал папки. Совет дельный. Прописал пути. Вот что получилось.

2023-08-11_23-59-31.png.f6ae2abffa0a7b263555b0d901f3ad7d.png

Когда нажимаю SAVE, то с тупостью осла (осел обидится) меняются пути, пояляются восклицательные знаки и вот такое сообщение.

2023-08-12_00-01-40.png.7ca9b902a2f905a4815529252e72b5d7.png

Когда нажиаю OK это все уходит, но при повторном входе в SDK MANAGER пути как на первом изображении. То есть, сохраняются.

NDK установлено по километровым путям, но без восклицательныйх знаков. Установилось с установкой Д11.4. Стоит ли установить в C:\NDK. Если да, то как?

2023-08-12_00-02-47.png.953f219ae8047310b8b90c07e6df8a6a.png

JAVA установлена сюда.

2023-08-12_00-03-16.png.ba23726bab8e901e69c2cd9b86731723.png

И еще такие проблемы. Телефон не видит. При компиляции выдает ошибку ERROR: E7684 Could not find program 'C:\bin\java.exe'. Там у меня сроду JAVы не было и все работало.

Правильно ли я выполнил установку. Как решить проблему с ошибкой JAVA и невидимостью телефона? Спасибо!

 

 

 

 

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

Упорно при компиляции выдает ошибку ERROR: E7684 Could not find program 'C:\bin\java.exe'.  Переменную среды поменял. Телефон не видит. Правда, все остальное я еще не настраивал.

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

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

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

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

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

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

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

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

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

  • Последние посетители   0 пользователей онлайн

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