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

OnePeople

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

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

  • Посещение

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

    58

Весь контент OnePeople

  1. Тогда я бы на вашем месте интегрировал ml kit https://developers.google.com/ml-kit/vision/barcode-scanning/android?hl=ru#java Или есть платный уже готовый от winsoft
  2. Напишите разработчику и отправьте ему пример, вообще в версии 3.9.8 исправляли datamatrix.
  3. Ну это к Гуглу вопросы, у меня в приложении работает, как у вас на скрине. Смысл такой вы создаёте запрос на определенный вид геолокации для вашего приложения в ответ получаете задачу для задачи определяете слушатель отсутствия геолокации. В слушателе обрабатываете "исключение" и если доступа нет, то запускаете действие с ответом. И обрабатываете ответ, нажал ли пользователь "ок" или нажал "нет, спасибо".(Пример как в delphi startActivityWithResult)
  4. Плюс нужно подключить необходимые библиотеки и соответственно нужно описать недостающие интерфейсы java
  5. var LLocationRequest := TJLocationRequest_Builder.JavaClass.init(300) //.setDurationMillis(durationMillis: Int64) - Sets the duration of this request. - The default value is Long.MAX_VALUE. //.setGranularity(granularity: Integer) - Sets the Granularity of locations returned for this request. - The default value is Granularity.GRANULARITY_PERMISSION_LEVEL. .setIntervalMillis(300) //- Sets the desired interval of location updates. .setMaxUpdateAgeMillis(0) //- Sets the maximum age of an initial historical location delivered for this request. - The default value is IMPLICIT_MAX_UPDATE_AGE. //.setMaxUpdateDelayMillis(maxUpdateDelayMillis: Int64) - Sets the longest a location update may be delayed. - The default value is 0. //.setMaxUpdates(maxUpdates: Integer) - Sets the maximum number of updates delivered to this request. - The default value is Integer.MAX_VALUE. // .setMinUpdateDistanceMeters(0) // - Sets the maximum number of updates delivered to this request. - The default value is 0. .setMinUpdateIntervalMillis(100)// - Sets the fastest allowed interval of location updates. - The default value is IMPLICIT_MIN_UPDATE_INTERVAL .setPriority(TJPriority.JavaClass.PRIORITY_HIGH_ACCURACY) // - Sets the Priority of the location request. - The default value is Priority.PRIORITY_BALANCED_POWER_ACCURACY. .setWaitForAccurateLocation(false)// - If set to true and this request is Priority.PRIORITY_HIGH_ACCURACY, this will delay delivery of initial low accuracy locations for a small amount of time in case a high accuracy location can be delivered instead. - The default value is true. .build(); var LLocationSettingsRequest := TJLocationSettingsRequest_Builder.JavaClass.init .addLocationRequest(LLocationRequest) .setAlwaysShow(true) .build(); FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage( TMessageResultNotification, HandleActivityMessage); MyOnFailureListener := TMyOnFailureListener.Create(Form1); MyOnFailureListener.onFailured := onFailureLocation; locTask := TJLocationServices.JavaClass.getSettingsClient(TAndroidHelper.Activity).checkLocationSettings(LLocationSettingsRequest); locTask.addOnFailureListener(MyOnFailureListener); procedure TForm1.onFailureLocation(e: JException); var resolve: JResolvableApiException; begin resolve := TJResolvableApiException.Wrap((e as ILocalObject).GetObjectID); if resolve <> nil then resolve.startResolutionForResult(TAndroidHelper.Activity, 953798); end; procedure TForm1.HandleActivityMessage(const Sender: TObject; const M: TMessage); begin LogCAAdd('HandleActivityMessage'); if M is TMessageResultNotification then OnActivityResult(TMessageResultNotification(M).RequestCode, TMessageResultNotification(M).ResultCode, TMessageResultNotification(M).Value); LogCAAdd('HandleActivityMessage ok'); end; function TForm1.OnActivityResult(RequestCode, ResultCode: Integer; Data: JIntent): Boolean; begin if RequestCode = 953798 then begin if ResultCode = TJActivity.JavaClass.RESULT_OK then begin LogCAAdd('isHardwareLocationEnabled RESULT_OK'); end else if ResultCode = TJActivity.JavaClass.RESULT_CANCELED then begin LogCAAdd('isHardwareLocationEnabled RESULT_CANCELED'); end; end; end; TOnFailureListenerEvent = procedure(e: JException) of object; TMyOnFailureListener = class(TJavaLocal, JOnFailureListener) private [weak] FParent : TForm1; FOnFailureListenerEvent: TOnFailureListenerEvent; public constructor Create(AParent : TForm1); Destructor Destroy; Override; procedure onFailure(e: JException); cdecl; property onFailured: TOnFailureListenerEvent read FOnFailureListenerEvent write FOnFailureListenerEvent; end;
  6. А что https://github.com/Spelt/ZXing.Delphi не работает?
  7. blStartDiscovery := FJBluetoothAdapter.startDiscovery; if TJBuild_VERSION.JavaClass.SDK_INT >= 29 then тогда нужно доп разрешение FPermissionBackgroundLocation := JStringToString(TJManifest_permission.JavaClass.ACCESS_BACKGROUND_LOCATION); тут через BroadcastReceiver ловим TJBluetoothDevice.JavaClass.ACTION_FOUND и TJBluetoothAdapter.JavaClass.ACTION_DISCOVERY_FINISHED и TJBluetoothAdapter.JavaClass.ACTION_DISCOVERY_STARTED в методе BroadcastReceiver OnReceive(Context: JContext; Intent: JIntent); if JStringToString(Intent.getAction).Equals(JStringToString(TJBluetoothDevice.JavaClass.ACTION_FOUND)) then begin Parcel := intent.getParcelableExtra(TJBluetoothDevice.JavaClass.EXTRA_DEVICE); if Parcel <> nil then BluetoothDevice := TJBluetoothDevice.Wrap((Parcel as ILocalObject).GetObjectID); if BluetoothDevice <> nil then if (BluetoothDevice.getBondState() = TJBluetoothDevice.JavaClass.BOND_NONE) then begin Form1.AddListViewItem(Form1.lvBTOBD, jstringtostring(BluetoothDevice.getName), jstringtostring(BluetoothDevice.getAddress),'Bluetooth'); end; end;
  8. uses ... type TGnnsStatusCallbackDelegate = class(TJavaLocal, JGnssStatusCallbackDelegate) private FCallback: JGnssStatusCallback; protected public procedure onFirstFix(ttffMillis: Integer); cdecl; procedure onSatelliteStatusChanged(status: JGnssStatus); cdecl; procedure onStarted; cdecl; procedure onStopped; cdecl; public constructor Create(); end; ... var GnnsStatusCallbackDelegate := TGnnsStatusCallbackDelegate implementation procedure TForm1.FormCreate(Sender: TObject); begin GnnsStatusCallbackDelegate := TGnnsStatusCallbackDelegate.Create; end; constructor TGnnsStatusCallbackDelegate.Create; begin inherited Create; FCallback := TJGnssStatusCallback.JavaClass.init(TAndroidHelper.Context, Self); end; procedure TGnnsStatusCallbackDelegate.onFirstFix(ttffMillis: Integer); begin // end; procedure TGnnsStatusCallbackDelegate.onSatelliteStatusChanged( status: JGnssStatus); var satelliteCount, usedCount: Integer; begin TTask.Run(procedure var i: Integer; begin try usedCount:= 0; satelliteCount := status.getSatelliteCount(); for i := 0 to satelliteCount - 1 do if status.usedInFix(i) then usedCount := usedCount + 1; TThread.Synchronize(nil, procedure begin Form1.tqsSatMax.Text := satelliteCount.ToString; Form1.tqsSat.Text := usedCount.ToString; Form1.tnSat.Text := usedCount.ToString; end); except Form1.LogCAAdd('TGnnsStatusCallback except'); end; end); end; procedure TGnnsStatusCallbackDelegate.onStarted; begin // end; procedure TGnnsStatusCallbackDelegate.onStopped; begin // end;
  9. Может кому надо Androidapi.JNI.GnssStatusCallback.rar
  10. Подскажите есть устройства на intel x86, приложение висит на логотипе. Какие действия для отладка и вообще поддерживаются ли устройства на этом чипе?
  11. OnePeople

    Ping в андроид

    https://stackoverflow.com/questions/9062182/android-icmp-ping?rq=4
  12. OnePeople

    Скриншот

    FMX / 11.3 Собственно вот, делаю в потоке скриншот и отрисовываю каждые 30 ms на прямоугольник, но жрет память как не в себя. Вопрос такой если у webbrowser нет канвы, как отрисовать WebBrowser на другом контроле. mapControl.cashBitmap := Form1.wb1.CaptureBitmap; TmpCanvas := TCanvasManager.CreateFromBitmap(lwMap.Fill.Bitmap.Bitmap, TCanvasQuality.HighPerformance); TmpCanvas.BeginScene(); TmpCanvas.DrawBitmap(mapControl.cashBitmap , mapControl.cashBitmap .BoundsF, lwMap.Fill.Bitmap.Bitmap.BoundsF, 1); TmpCanvas.EndScene;
  13. Это просто использовать Androidapi.JNI.Bluetooth Это для примера Допустим инициализировали адаптер BtObject := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.BLUETOOTH_SERVICE); if BtObject <> nil then FJBluetoothManager := TJBluetoothManager.Wrap((BtObject as ILocalObject).GetObjectID); if FJBluetoothManager <> nil then FJBluetoothAdapter := FJBluetoothManager.getAdapter; тут подключились mmBluetoothDevice := FJBluetoothAdapter.GetRemoteDevice(StringTOJString(mac)); tmpBluetoothSocket := mmBluetoothDevice.createInsecureRfcommSocketToServiceRecord (TJUUID.JavaClass.fromString(StringToJString('00001101-0000-1000-8000-00805F9B34FB'))); mmBluetoothSocket.Connect(); отправка и прием ответа repeat if mmBluetoothSocket.isConnected = true then begin isOk := false; Answer := ''; mmInStream := mmBluetoothSocket.getInputStream; mmOutStream := mmBluetoothSocket.getOutputStream; try mmOutStream.Write(StringToJAMove(command + #13#10)); mmOutStream.Flush(); except end; isClose := false; SW := TStopwatch.StartNew; milisec := 0; repeat try if mmInStream.available > 0 then begin LData := mmInStream.read(); isDataAviable := True; end else isDataAviable := false; except LData := -1; end; if (LData <> -1) and (isDataAviable = true) then begin try Wdata := LData; sym := Chr(WData); except LData := -1; end; if sym <> '>' then Answer := Answer + sym; end; try if Assigned(OBDListner) then isClose := OBDListner.Terminated; except Form1.LogOBDAdd('SendBTData except 3'); end; milisec := SW.ElapsedMilliseconds; until (LData = -1) or (sym = '>') or (isClose = true) or (milisec > 5000);
  14. Я думаю почему так кадров много, тоже делал на днях как у вас, только проблема не в этом, вся загвоздка в bringtofront, вот эту проблему как решить? Забил на это так как времени не было. Так же делал все это в потоке с использованием floatanimation, но прирост не большой получился.
  15. procedure MyCurrentForm.MyButtonClick(Sender: TObject); var dlg: TMyModalForm; begin // Create an instance of a form. dlg := TMyModalForm.Create(nil); // Configure the form. For example, give it a display name. dlg.Caption := 'My Modal Dialog Box'; // Show your dialog box and provide an anonymous method that handles the closing of your dialog box. dlg.ShowModal( procedure(ModalResult: TModalResult) begin // Do something. end ); end; Из docwiki.embarcadero.com
  16. Да не проблема это, может быть такая ситуация что вам устройство будет отправлять данные допустим "12" потом в JInputStream будет доступных байт ноль, потом придет "345", поэтому тут нужно делать проверку на завершающий символ сообщения и на необходимый таймаут. Все делается через java код, за 10 минут.
  17. android.permission.ACCESS_BACKGROUND_LOCATION, а так да приложение крякнет ос, делайте сервис.
  18. Конечно тут есть кучу вопросов, как будут добавляться вкладки, кнопки вкладок в каком виде нужны, эффекты перехода, плюс много чего еще, описание задачи слабое, но я скажу вам так: TabControl - пойдет.
  19. Androidapi.AppGlue в uses добавьте странно но у вас что то не так, что то вы намудрили, PAndroid_poll_source описан должен быть тут Androidapi.AppGlue
  20. Target Platform -> Android (32/64) -> Libraries. правая кнопка мыши, сбросить по умолчанию.
  21. Target Platform -> Android (32/64) -> Libraries. правая кнопка мыши, сбросить по умолчанию.
  22. Зачем он вам вообще нужен, делайте как говорит гугл, создавайте LocatioListner! Для вас сделал пример, как надо сами допишите. Android.LocationListener.rar
×
×
  • Создать...