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

OnePeople

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

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

  • Посещение

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

    55

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

  1. Это просто использовать 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);
  2. Я думаю почему так кадров много, тоже делал на днях как у вас, только проблема не в этом, вся загвоздка в bringtofront, вот эту проблему как решить? Забил на это так как времени не было. Так же делал все это в потоке с использованием floatanimation, но прирост не большой получился.
  3. 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
  4. Да не проблема это, может быть такая ситуация что вам устройство будет отправлять данные допустим "12" потом в JInputStream будет доступных байт ноль, потом придет "345", поэтому тут нужно делать проверку на завершающий символ сообщения и на необходимый таймаут. Все делается через java код, за 10 минут.
  5. android.permission.ACCESS_BACKGROUND_LOCATION, а так да приложение крякнет ос, делайте сервис.
  6. Конечно тут есть кучу вопросов, как будут добавляться вкладки, кнопки вкладок в каком виде нужны, эффекты перехода, плюс много чего еще, описание задачи слабое, но я скажу вам так: TabControl - пойдет.
  7. Androidapi.AppGlue в uses добавьте странно но у вас что то не так, что то вы намудрили, PAndroid_poll_source описан должен быть тут Androidapi.AppGlue
  8. Target Platform -> Android (32/64) -> Libraries. правая кнопка мыши, сбросить по умолчанию.
  9. Target Platform -> Android (32/64) -> Libraries. правая кнопка мыши, сбросить по умолчанию.
  10. Зачем он вам вообще нужен, делайте как говорит гугл, создавайте LocatioListner! Для вас сделал пример, как надо сами допишите. Android.LocationListener.rar
  11. Так у меня его нет) Себе делал callback для поиска количества спутников. Пишите на java callback (GnssStatusCallback.rar) Через codex генерируете jar файл, добавляете его себе в проект в Libraries Пишите объявления методов (Androidapi.JNI.GnssStatusCallback.rar) Создаем класс type TGnnsStatusCallbackDelegate = class(TJavaLocal, JGnssStatusCallbackDelegate) private class var FConnectivityManager: JConnectivityManager; 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; constructor TGnnsStatusCallbackDelegate.Create; begin inherited Create; FCallback := TJGnssStatusCallback.JavaClass.init(TAndroidHelper.Context, Self); end; GnnsStatusCallbackDelegate := TGnnsStatusCallbackDelegate.Create; Androidapi.JNI.GnssStatusCallback.rar GnssStatusCallback.rar
  12. Может их нет, новых, а есть устройства которые уже подключались ранее Bluetooth.GetPairedDevices; FPairedDevices := Bluetooth.GetPairedDevices; if FPairedDevices.Count > 0 then for I:= 0 to FPairedDevices.Count - 1 do ListBox.Items.Add(FPairedDevices[I].DeviceName) Ну и если Android API >= 31 if TJBuild_VERSION.JavaClass.SDK_INT >= 31 then begin FPermissionBTConnectSettings := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_CONNECT); FPermissionBTScanSettings := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_SCAN); FPermissionBTAdvertiseSettings := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_ADVERTISE); PermissionsService.RequestPermissions([FPermissionBTConnectSettings] + [FPermissionBTScanSettings] + [FPermissionBTAdvertiseSettings], nil); end;
  13. Не работал со стандартным JSON, но может так? TJSONArray* arr2 = arr1<TJSONArray*>(Object->GetValue(_D("arr2")));
  14. Для начала доступ к памяти проверьте if TJBuild_VERSION.JavaClass.SDK_INT >= 30 then begin if TJEnvironment.JavaClass.isExternalStorageManager = false then begin Intent := TJIntent.Create; Intent:= TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('package:').concat(TAndroidHelper.Context.getPackageName))); if intent.resolveActivity(TAndroidHelper.Context.getPackageManager) <> nil then TAndroidHelper.Context.startActivity(Intent); end; end; В <application android:persistent="%persistent%" android:restoreAnyVersion="%restoreAnyVersion%" android:label="%label%" android:debuggable="%debuggable%" android:largeHeap="%largeHeap%" Должна быть строка android:requestLegacyExternalStorage="true"
  15. И FormActivate добавьте myIntent := TAndroidHelper.Activity.getIntent; if myIntent <> nil then Form1.OnNewIntent(myIntent);
  16. Добавьте это MainActivity.registerIntentAction(TJIntent.JavaClass.ACTION_VIEW); перед этим IMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage( TMessageReceivedNotification, HandleIntentMessage);
  17. var IMessageSubscriptionID: Integer; // в создании формы IMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage( TMessageReceivedNotification, HandleIntentMessage); procedure TForm1.HandleIntentMessage(const Sender: TObject; const M: TMessage); begin try if M is TMessageReceivedNotification then begin OnNewIntent(TMessageReceivedNotification(M).Value); end; except Form1.LogAdd('HandleIntentMessage except'); end; end; function TForm1.OnNewIntent(Intent: JIntent): Boolean; var insPath: String; uri: Jnet_Uri; begin Result := False; try if Intent <> nil then begin uri := Intent.getData; if uri <> nil then begin insPath:= JStringToString( uri.getEncodedPath); if (ExtractFileExt(insPath)='.x10') then begin // работаете с файлом end; end; end; except LogAdd('OnNewIntent except'); end; end; Также в манифест добавить <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="file" /> <data android:scheme="content" /> <data android:scheme="http" /> <data android:scheme="https" /> <data android:host="*" /> <data android:pathPattern=".*\\.x10" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW"/> <action android:name="android.intent.action.EDIT"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="file" /> <data android:scheme="content" /> <data android:scheme="http" /> <data android:scheme="https" /> <data android:host="*" /> <data android:mimeType="*/*" /> <data android:pathPattern=".*\\.x10" /> </intent-filter>
  18. А почему TThread.CurrentThread.ThreadID.ToString, а не TThread.CurrentThread.ClassName? Тоже с логами вожусь. Для чего именно Id?
  19. Вам уже ответили, но можете конечно сделать так в главном потоке procedure Test; const n = 200; var I: Integer; begin pb1.Min := 0; pb1.Max := n - 1; for I := 0 to n - 1 do begin pb1.Value := I; sleep(10); Application.ProcessMessages; end; end;
  20. 1. Разрешения приложения на чтение запись файлов 2. Файлы в Deployment для 32 и 64 бит разные, проверьте
×
×
  • Создать...