Как добавить маркер на гугл карте

Я зделал код которий принимает координати с ардуино и мне теперь нужно вивести маркер поза функцией OnMapReady. Как мне ето зделать? Может нужно визвать OnMapReady в функцие в которой мне нужно создать маркер? ''' package com.example.mapp;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import android.Manifest;
import android.annotation.SuppressLint;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {

    private static final String TAG = "BluetoothTerminal";
    private static final int REQUEST_ENABLE_BT = 1;
    private static final int REQUEST_PERMISSIONS = 2;
    private static final UUID HC06_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
    public GoogleMap myMap;
    private BluetoothAdapter bluetoothAdapter;
    private BluetoothDevice connectedDevice;
    private BluetoothSocket bluetoothSocket;
    private OutputStream outputStream;
    private InputStream inputStream;
    private TextView messageTxt;
    private Marker currentMarker;
    public  double latitude1 = 50;//50.277073;
    public double longitude1 = 30;//30.298515;
    //private Marker arduino;


    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        messageTxt = findViewById(R.id.textView);
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (bluetoothAdapter == null) {
            Toast.makeText(this, "Bluetooth не підтримується", Toast.LENGTH_LONG).show();
            finish();
        }

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
        //buttonConnect.setOnClickListener(v -> connectToHC06());
        connectToHC06();
        //updateMapLocation(latitude1, longitude1);
    }

    @Override
    public void onMapReady(@NonNull GoogleMap googleMap) {
        myMap = googleMap;
        // Додайте перевірку для ініціалізації карти
        LatLng newLocation = new LatLng(latitude1, longitude1);
        myMap.addMarker(new MarkerOptions().position(newLocation).title("Arduino"));
        /*if (longitude1 != 0 & latitude1 !=0) {
            updateMapLocation(latitude1, longitude1);
        }*/
        // Переміщуємо камеру на нову локацію
        myMap.moveCamera(CameraUpdateFactory.newLatLngZoom(newLocation, 15));
    }

    private void connectToHC06() {
        if (!bluetoothAdapter.isEnabled()) {
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    ActivityCompat#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for ActivityCompat#requestPermissions for more details.
                return;
            }
            startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
        }

        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.BLUETOOTH_CONNECT},
                REQUEST_PERMISSIONS);

        @SuppressLint("MissingPermission")
        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
        if (pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
                if (device.getName().equals("HC-06")) {
                    connectedDevice = device;
                    break;
                }
            }
        }

        if (connectedDevice == null) {
            Toast.makeText(this, "HC-06 не знайдено серед спарених пристроїв", Toast.LENGTH_SHORT).show();
            return;
        }

        try {
            bluetoothSocket = connectedDevice.createRfcommSocketToServiceRecord(HC06_UUID);
            bluetoothSocket.connect();
            outputStream = bluetoothSocket.getOutputStream();
            inputStream = bluetoothSocket.getInputStream();

            Toast.makeText(this, "Підключено до HC-06", Toast.LENGTH_SHORT).show();


            startListening();
        } catch (IOException e) {
            Log.e(TAG, "Помилка підключення", e);
            Toast.makeText(this, "Помилка підключення до HC-06", Toast.LENGTH_SHORT).show();
        }
    }
    private void startListening() {
        if (inputStream == null) {
            Toast.makeText(this, "Вхідний потік не ініціалізовано", Toast.LENGTH_SHORT).show();
            return;
        }

        new Thread(() -> {
            byte[] buffer = new byte[1024]; // Буфер для збереження отриманих даних
            int bytes; // Кількість отриманих байтів
            StringBuilder messageBuffer = new StringBuilder(); // Буфер для збирання повідомлень

            while (true) {
                try {
                    // Читання вхідних даних з Bluetooth
                    bytes = inputStream.read(buffer);
                    String receivedFragment = new String(buffer, 0, bytes);

                    // Додаємо фрагмент до загального буфера
                    messageBuffer.append(receivedFragment);

                    // Перевіряємо наявність термінатора (';')
                    int endIndex;
                    while ((endIndex = messageBuffer.indexOf(";")) != -1) {
                        // Виділяємо повне повідомлення
                        String completeMessage = messageBuffer.substring(0, endIndex);
                        messageBuffer.delete(0, endIndex + 1); // Видаляємо оброблене повідомлення з буфера

                        // Обробка повідомлення
                        parseLocationData(completeMessage);
                    }
                } catch (IOException e) {
                    Log.e(TAG, "Помилка під час читання з вхідного потоку Bluetooth", e);
                    break;
                }
            }
        }).start();
    }

    private void parseLocationData(String data) {
        // Перевірка, чи рядок має правильний формат
        if (data == null || !data.contains("Latitude:") || !data.contains("Longitude:")) {
            Log.e(TAG, "Неправильний формат даних: " + data);
            return;
        }
        //updateMapLocation(data);
        // Розділяємо рядок на частини
        String[] parts = data.split(", ");
        String latitudePart = parts[0].replace("Latitude:", "").trim();
        String longitudePart = parts[1].replace("Longitude:", "").trim();

        // Перетворюємо рядки на числа
        latitude1 = Double.parseDouble(latitudePart);
        longitude1 = Double.parseDouble(longitudePart);


        updateMapLocation(latitude1, longitude1);
        /*try {
            // Розділяємо рядок на частини
            String[] parts = data.split(", ");
            String latitudePart = parts[0].replace("Latitude:", "").trim();
            String longitudePart = parts[1].replace("Longitude:", "").trim();

            // Перетворюємо рядки на числа
            latitude1 = Double.parseDouble(latitudePart);
            longitude1 = Double.parseDouble(longitudePart);

            //updateMapLocation(latitude1, longitude1);
            // Виводимо широту та довготу
            Log.d(TAG, "Широта: " + latitude1 + ", Довгота: " + longitude1);
            // Оновлюємо карту

        } catch (Exception e) {
            Log.e(TAG, "Помилка розбору даних: " + data, e);
        }*/
    }
    public void updateMapLocation(double latitude, double longitude) {
    //public void updateMapLocation(String goodday) {
        Log.d(TAG, "Широта: " + latitude1 + ", Довгота: " + longitude1);
        if (myMap == null) {
            Log.e(TAG, "Карта ще не готова для оновлення локації");
            return;
        }
        //myMap.clear(); // Очищаємо всі
        LatLng newLocation = new LatLng(latitude, longitude);
        myMap.addMarker(new MarkerOptions()
                .position(newLocation)
                .title("Arduino"));
        return;
        myMap.moveCamera(CameraUpdateFactory.newLatLngZoom(newLocation, 15));
    }

}'''

Ответы (0 шт):