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

mazayhin

Пользователи
  • Постов

    163
  • Зарегистрирован

  • Посещение

  • Победитель дней

    19

Активность репутации

  1. Like
    mazayhin получил реакцию от Bob32 в Ориентация на Север и углы наклона телефона   
    После получения матрицы, определяете поворот устройства через IFMXScreenService.GetScreenOrientation к примеру, или опять же, напрямую через api.
    Получаете углы (var x, y: integer; OutMatrix: TJavaArray<single>(16)):
    0: ничего не делаем, в т.ч. ремап
    90: X := TJSensorManager.JavaClass.AXIS_Y; Y := TJSensorManager.JavaClass.AXIS_MINUS_X;
    180: X := TJSensorManager.JavaClass.AXIS_X; Y := TJSensorManager.JavaClass.AXIS_MINUS_Y;
    270: X := TJSensorManager.JavaClass.AXIS_MINUS_Y; Y := TJSensorManager.JavaClass.AXIS_X;
    TJSensorManager.JavaClass.remapCoordinateSystem(FMatrix(изначальная матрица), x, y, OutMatrix)
    TJSensorManager.JavaClass.getOrientation(OutMatrix, FOrientation)
  2. Like
    mazayhin получил реакцию от Barbanel в Ориентация на Север и углы наклона телефона   
    После получения матрицы, определяете поворот устройства через IFMXScreenService.GetScreenOrientation к примеру, или опять же, напрямую через api.
    Получаете углы (var x, y: integer; OutMatrix: TJavaArray<single>(16)):
    0: ничего не делаем, в т.ч. ремап
    90: X := TJSensorManager.JavaClass.AXIS_Y; Y := TJSensorManager.JavaClass.AXIS_MINUS_X;
    180: X := TJSensorManager.JavaClass.AXIS_X; Y := TJSensorManager.JavaClass.AXIS_MINUS_Y;
    270: X := TJSensorManager.JavaClass.AXIS_MINUS_Y; Y := TJSensorManager.JavaClass.AXIS_X;
    TJSensorManager.JavaClass.remapCoordinateSystem(FMatrix(изначальная матрица), x, y, OutMatrix)
    TJSensorManager.JavaClass.getOrientation(OutMatrix, FOrientation)
  3. Like
    mazayhin получил реакцию от Barbanel в Ориентация на Север и углы наклона телефона   
    Да, все верно, именно об этом и писал.
  4. Like
    mazayhin получил реакцию от Barbanel в Ориентация на Север и углы наклона телефона   
    Все на скорую руку. Никаких проверок не делал. Вообще, за основу брал статью с хабра https://habr.com/ru/post/137820/
    Так же учтите, что необходимо проверить наличие магнитного датчика, т.к. без него getRotationMatrix всегда будет возвращать false, т.о. не получится определить положение устройства. Так же, еще, getOrientation вернет неправильные значения при повороте телефона, для этого надо определять текущую ориентацию экрана, и на основании этого делать remapCoordinateSystem, и только после этого уже определять положение.
    Смотрите, принцип понятен.
    Обертки взял от FMXExpress, немного подчистил, что бы не тянуть лишнего.
    Если будете брать сами, то обратите внимание:
    android.hardware.SensorManager:
    надо изменить JavaSignature на [JavaSignature('android/hardware/SensorManager')] для интерфейса JSensorManager (убрать $ и что после него, иначе, EJNIFatal)
    android.hardware.SensorEventListener:
    неправильно унаследованы интерфейсы (от JObject), а так как SensorEventListener это интерфейс, наследуемся от IJavaClass и IJavaInstance соответственно.
     
    SensorManager.zip
  5. Like
    mazayhin получил реакцию от Anatoliy в Serial port   
    Но все же, думаю лучше, скомпилировать JAR и к нему уже делать обертку. Т.к. в противном случае, придется с собой очень много чего тащить в проект (java.*, javax.* и прочие, смотрите, сколько там зависимостей), что можно сказать, равнозначно почти собирать в студии половину android-api
  6. Like
    mazayhin получил реакцию от MrAnderson в Перестало работать приложение. Splash screen и дальше падает.   
    Потому что API-Level 26 он будет стоять автоматически. Как впрочем и практически все остальные, запрошенные в манифесте. Так же, не плохо было бы добавить в манифест
    <uses-feature android:name="android.hardware.camera" /> Начиная с 26 необходимо разрешения, помимо указания в манифесте, должны явно запрашиваться у пользователя.
    Почитайте https://developer.android.com/guide/topics/permissions/overview
    Ну а для Delphi подключайте KastiFree https://github.com/DelphiWorlds/KastriFree
    Там есть пример использования https://github.com/DelphiWorlds/KastriFree/tree/master/Demos/AndroidDangerousPermissions
    и в добавок https://github.com/DelphiWorlds/KastriFree/tree/master/Demos/AndroidAPI26 тут как раз работа с камерой
  7. Like
    mazayhin получил реакцию от Anatoliy в Serial port   
    Можно создать обертку для java-классов, которые есть в исходниках Android с помощью Java2OP, или же руками, посмотрев как раз исходники.
    Исходники %sdk_path%\sources\android-nn\android\hardware\usb
    android-nn - версия API
    И уже эти файлы подключать.
    Либо взять готовые от FMXExpress
  8. Like
    mazayhin получил реакцию от Anatoliy в Перестало работать приложение. Splash screen и дальше падает.   
    Потому что API-Level 26 он будет стоять автоматически. Как впрочем и практически все остальные, запрошенные в манифесте. Так же, не плохо было бы добавить в манифест
    <uses-feature android:name="android.hardware.camera" /> Начиная с 26 необходимо разрешения, помимо указания в манифесте, должны явно запрашиваться у пользователя.
    Почитайте https://developer.android.com/guide/topics/permissions/overview
    Ну а для Delphi подключайте KastiFree https://github.com/DelphiWorlds/KastriFree
    Там есть пример использования https://github.com/DelphiWorlds/KastriFree/tree/master/Demos/AndroidDangerousPermissions
    и в добавок https://github.com/DelphiWorlds/KastriFree/tree/master/Demos/AndroidAPI26 тут как раз работа с камерой
  9. Like
    mazayhin получил реакцию от Barbanel в Перестало работать приложение. Splash screen и дальше падает.   
    Потому что API-Level 26 он будет стоять автоматически. Как впрочем и практически все остальные, запрошенные в манифесте. Так же, не плохо было бы добавить в манифест
    <uses-feature android:name="android.hardware.camera" /> Начиная с 26 необходимо разрешения, помимо указания в манифесте, должны явно запрашиваться у пользователя.
    Почитайте https://developer.android.com/guide/topics/permissions/overview
    Ну а для Delphi подключайте KastiFree https://github.com/DelphiWorlds/KastriFree
    Там есть пример использования https://github.com/DelphiWorlds/KastriFree/tree/master/Demos/AndroidDangerousPermissions
    и в добавок https://github.com/DelphiWorlds/KastriFree/tree/master/Demos/AndroidAPI26 тут как раз работа с камерой
  10. Like
    mazayhin получил реакцию от unlimuser в XE8, не могу установить соединение с базой Sqlite на устройстве под Android   
    Ну скорее всего у себя вы указали в коннекшене символическое имя для подключения, оно сохраняется в FDConnectionDefs.ini (вроде правильно), а у пользователя его нет. 
    Задайте параметры подключения вручную, явно
  11. Like
    mazayhin получил реакцию от Anatoliy в XE8, не могу установить соединение с базой Sqlite на устройстве под Android   
    Ну скорее всего у себя вы указали в коннекшене символическое имя для подключения, оно сохраняется в FDConnectionDefs.ini (вроде правильно), а у пользователя его нет. 
    Задайте параметры подключения вручную, явно
  12. Like
    mazayhin отреагировална Равиль Зарипов (ZuBy) в Мобильное приложение для курьера   
    У меня в гите есть набор компонентов, там есть гамбургер, кнопка назад и FAB кнопка.
    смотрите демки 
  13. Like
    mazayhin получил реакцию от ivyl в Обновление приложения   
    Сколько уже разжевывали, что не заменяются ресурсы из деплоя..
  14. Like
    mazayhin получил реакцию от x11 в Окно на переднем плане во время звонка   
    Как создавать это вью или как им созданным пользоваться?
    Если создавать - то создаете разметку в xml, деплоете ее в layouts. Примеров в интернете можно кучу найти. Остальное - в другие папки.
    В общем, получится во так.
    Здесь задеплоено 3 файла - картинка res/drawable/myicon.png, res/drawable/border.xml - прямоугольник подложки и res/layouts/toast.xml - сам lauoyt.
    toast.xml ("-- " - комментарии, удалить надо будет).
    Текст, картинки и прочее можем сразу указать в разметке, и грузить автоматически. Но всегда сможем поменять в коде
    border.xml
    Думаю, тут все понятно. Примитив может быть любой.
    И формируем тост:
    //uses FMX.Helpers.Android, AndroidApi.Helpers, AndroidApi.JNI.GraphicsContentViewText, Androidapi.JNI.Widget var Toast: JToast; InfObj: JObject; Inflater: JLayoutInflater; View: JView; Text: JTextView; begin InfObj := TAndroidHelper.Context.getSystemService (TJContext.JavaClass.LAYOUT_INFLATER_SERVICE); Inflater := TJLayoutInflater.Wrap((InfObj as ILocalObject).GetObjectID); View := TJView.JavaClass.init(TAndroidHelper.Context); View := Inflater.inflate(TAndroidHelper.Context.getResources() .getIdentifier(StringToJString('layout/toast'), StringToJString('layout'), TAndroidHelper.Context.getPackageName), nil); //Грузим из ресурсов. Второе значение всегда nil Text := TJTextView.Wrap ((View.findViewById(TAndroidHelper.Context.getResources() .getIdentifier(StringToJString('id/toastText'), StringToJString('id'), TAndroidHelper.Context.getPackageName)) as ILocalObject).GetObjectID); // Так ищем элементы разметки, если надо свои значения поставить. Так же могли и поменять картинку(id/toastImage), подложку и т.д. Text.setText(StrToJCharSequence('Привет, х11! Я нативный Toast!' + #13 + 'Сегодня пишем на Pascal')); //Устанавливаем свое значение. CallInUIThreadAndWaitFinishing( //В сервисе запускаем без этого, отключаем FMX.Helpers.Android - только его, GraphicsContentViewText к графике, которая ломает сервис, отношения не имеет. procedure begin Toast := TJToast.JavaClass.init(TAndroidHelper.Context); Toast.setView(View); // Своя вьюшка Toast.setDuration(TJToast.JavaClass.LENGTH_LONG); //Константа. Свое значение не пройдет Toast.Show; //Показываем end); end; Ну и все в принципе.
    Сложного, считаю, 0.
    А что не понятно, яндекс показывает, глаза разбегаются.
     

  15. Like
    mazayhin получил реакцию от Andrey Efimov в Log.d - что это?   
    API for sending log output.
    Generally, you should use the Log.v(), Log.d(),Log.i(), Log.w(), and Log.e() methods to write logs. You can then view the logs in logcat.
    The order in terms of verbosity, from least to most is ERROR, WARN, INFO, DEBUG, VERBOSE. Verbose should never be compiled into an application except during development. Debug logs are compiled in but stripped at runtime. Error, warning and info logs are always kept.
    Смотреть это можно через monitor.bat идет в составе sdk, ну или abd logcat. В лог выод идет только для debug сборок, в release не выводится
  16. Like
    mazayhin получил реакцию от Andrey Efimov в SSDP for Android   
    Как вижу, тут есть 3 варианта.
    1. Взять обертки над SDK от fmxexpress (или сделать самому), и самому написать по примеру выше, но уже на delphi.
    2. Найти подходящее на Java, скомпилировать в jar, создать обертку для delphi (Java2Op) и использовать уже ее.
    3. Наверное, самый удачный вариант, т.к. все это чудо работает по UDP, самому на основе Indy реализовать в своей программе.
  17. Like
    mazayhin получил реакцию от AngryOwl в Программно развернуть свернутое приложение   
    Вот здесь, когда оборачиваете в PendingIntent, присваиваете ему уникальный номер (в примере выше это 1), этот номер где-то храните.
    PendingIntent := TJPendingIntent.JavaClass.getBroadcast (TAndroidHelper.Context, _ТУТ НОМЕР_, intent, 0); Потом, что бы отменить, создаете идентичный PendingIntent, с номером, с которым запускали, и
    TAndroidHelper.AlarmManager.cancel(PendingIntent);  
  18. Like
    mazayhin получил реакцию от ENERGY в Программно развернуть свернутое приложение   
    Вот здесь, когда оборачиваете в PendingIntent, присваиваете ему уникальный номер (в примере выше это 1), этот номер где-то храните.
    PendingIntent := TJPendingIntent.JavaClass.getBroadcast (TAndroidHelper.Context, _ТУТ НОМЕР_, intent, 0); Потом, что бы отменить, создаете идентичный PendingIntent, с номером, с которым запускали, и
    TAndroidHelper.AlarmManager.cancel(PendingIntent);  
  19. Like
    mazayhin получил реакцию от Ingalime в Программно развернуть свернутое приложение   
    Вот здесь, когда оборачиваете в PendingIntent, присваиваете ему уникальный номер (в примере выше это 1), этот номер где-то храните.
    PendingIntent := TJPendingIntent.JavaClass.getBroadcast (TAndroidHelper.Context, _ТУТ НОМЕР_, intent, 0); Потом, что бы отменить, создаете идентичный PendingIntent, с номером, с которым запускали, и
    TAndroidHelper.AlarmManager.cancel(PendingIntent);  
  20. Thanks
    mazayhin получил реакцию от Dev в Программно развернуть свернутое приложение   
    Вот здесь, когда оборачиваете в PendingIntent, присваиваете ему уникальный номер (в примере выше это 1), этот номер где-то храните.
    PendingIntent := TJPendingIntent.JavaClass.getBroadcast (TAndroidHelper.Context, _ТУТ НОМЕР_, intent, 0); Потом, что бы отменить, создаете идентичный PendingIntent, с номером, с которым запускали, и
    TAndroidHelper.AlarmManager.cancel(PendingIntent);  
  21. Like
    mazayhin отреагировална FREEFAR в Приложение для получения раздражителей в работе Магазинов розничной сети   
    Продолжая выражать благодарность всем тем кто помогал решать задачи которые перед нами ставили с удовольствием предлагаю вашему вниманию собственно само приложение. На Андроид доступно пока попрямой ссылке https://play.google.com/store/apps/details?id=com.wb.PulsM
    На iOS ушли в аудит Apple
  22. Thanks
    mazayhin отреагировална Savage в Изменение стандартного звука а push-уведомлении   
    Задачу решил.
    Вот измененная процедура, ну и добавил вытягивание параметра sound
        private Builder buildNotification(String msgTitle, String msgText, String msgSound, PendingIntent contentIntent) {
            int icon = this.mContext.getApplicationContext().getApplicationInfo().icon;
            Builder mBuilder = new Builder(this.mContext);
            mBuilder.setSmallIcon(icon);
            mBuilder.setTicker(msgTitle);
            mBuilder.setContentTitle(msgTitle);
            mBuilder.setContentText(msgText);
            mBuilder.setContentIntent(contentIntent);
    // savage
            if (msgSound == "") {
               mBuilder.setSound(RingtoneManager.getDefaultUri(2));
            }
            else
            {
              mBuilder.setSound(Uri.parse("android.resource://" + this.mContext.getPackageName() + "/raw/"+msgSound));
            }
    //
            return mBuilder;
        }
    Звуковой файл надо добавить в Deployment
    Расположение res/raw/
    При формировании push-сообщения имя файла указывается без расширения. К примеру, если звуковой файл был event1.mp3, то в пуше посылаем "sound":"event1"
     
    Во вложении патченый файл.
    Сборка fmx.jar и classes.dex как в этой теме
     
    NotificationPublisher.zip
  23. Thanks
    mazayhin получил реакцию от Dev в SSDP for Android   
    Как вижу, тут есть 3 варианта.
    1. Взять обертки над SDK от fmxexpress (или сделать самому), и самому написать по примеру выше, но уже на delphi.
    2. Найти подходящее на Java, скомпилировать в jar, создать обертку для delphi (Java2Op) и использовать уже ее.
    3. Наверное, самый удачный вариант, т.к. все это чудо работает по UDP, самому на основе Indy реализовать в своей программе.
  24. Thanks
    mazayhin получил реакцию от DMS в Log.d - что это?   
    API for sending log output.
    Generally, you should use the Log.v(), Log.d(),Log.i(), Log.w(), and Log.e() methods to write logs. You can then view the logs in logcat.
    The order in terms of verbosity, from least to most is ERROR, WARN, INFO, DEBUG, VERBOSE. Verbose should never be compiled into an application except during development. Debug logs are compiled in but stripped at runtime. Error, warning and info logs are always kept.
    Смотреть это можно через monitor.bat идет в составе sdk, ну или abd logcat. В лог выод идет только для debug сборок, в release не выводится
  25. Like
    mazayhin получил реакцию от Barbanel в REST Client Library vs. THTTPClient   
    THTTPClient - голый клиент, а в TREST... За вас сделана часть работы для работы по rest, и ну и преобразования результата в TDataSet. Внутри там тот же HttpClient
×
×
  • Создать...