Задать вопрос
  • Геолокация GPS в потоке?

    @m0t0d0r Автор вопроса
    Нашёл пробемму

    package com.example.getlocation;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.core.app.ActivityCompat;
    import androidx.core.content.ContextCompat;
    import android.Manifest;
    import android.content.Context;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.os.Looper;
    
    public class MainActivity extends AppCompatActivity {
        int PERMISSION_REQUEST = 1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // Получаем права на доступ к локацие
            if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)==-1){
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST);
                System.out.println("  --  УПС");
            }
            // Как дождаться принятия решения пользователем?
    
            //Поток определения локации
            Thread MyThread = new Thread(MyGetLocationThread);
            MyThread.start();
        }
    
        // Поток определения локации
        Runnable MyGetLocationThread = new Runnable() {
            public void run() {
                Looper.prepare();
                LocationListener myLocationListener;
                LocationManager myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    
                myLocationListener = new LocationListener() {
                    @Override
                    public void onLocationChanged(Location location) {
                        double Longitude = location.getLongitude(); // Долгота
                        double Latitude = location.getLatitude(); // Широта
                        System.out.println(Latitude+"  --  "+Longitude);
                    }
    
                    @Override
                    public void onStatusChanged(String s, int i, Bundle bundle) {
                        //To change body of implemented methods use File | Settings | File Templates.
                    }
    
                    @Override
                    public void onProviderEnabled(String s) {
                        //To change body of implemented methods use File | Settings | File Templates.
                    }
    
                    @Override
                    public void onProviderDisabled(String s) {
                        //To change body of implemented methods use File | Settings | File Templates.
                    }
                };
    
                // Запрос разрешения у пользователя на доступ к локации
                // this был заменен на MainActivity.this
                if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)==0){
                    myLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 0, myLocationListener);
                }
                Looper.loop();
            }
        };
    
    }


    Надо было лупер повешать

    Есть ещё вопрос

    // Получаем права на доступ к локацие
            if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)==-1){
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST);
                System.out.println("  --  УПС");
            }
            // Как дождаться принятия решения пользователем?


    Упс выполняется не линейно, тоесть, я ещё на принял решение по запросу requestPermissions, а приложение уже идет работать дальше. Не ждёт ответа от пользователя. Может кто знает, как приостановить программу, до момента принятия решения. Спасибо.
    Ответ написан
    Комментировать