GPS трекер нить android

Я пытался создать поток, способный постоянно отправлять координаты GPS в мою БД. Это мой код:

public class trackThread extends Thread {
    Context mContext;
    public trackThread(Context mContext) {
        this.mContext = mContext;
    }

    @SuppressLint("MissingPermission")
    public void run() {
        LocationManager locationManager = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
        trackThread.MyCurrentLoctionListener locationListener = new trackThread.MyCurrentLoctionListener();
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
    }



    public class MyCurrentLoctionListener implements android.location.LocationListener {

        @Override
        public void onLocationChanged(Location location) {
            final String myLocation = "Latitude = " + location.getLatitude() + " Longitude = " + location.getLongitude();



            // Instantiate the RequestQueue.
            RequestQueue queue = Volley.newRequestQueue(mContext);
            String url  = "http://example.org/send.php?lat = " + location.getLatitude() + "&long = " + location.getLongitude();

            // Request a string response from the provided URL.
            StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            // Display the first 500 characters of the response string.


                            Log.e("Response is: "+ response.toString(), myLocation);
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("That didn't work!", myLocation);
                }
            });

            // Add the request to the RequestQueue.
            queue.add(stringRequest);
            Log.e("La risposta è ", stringRequest.toString());


        }

        @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {

        }

        @Override
        public void onProviderEnabled(String s) {

        }

        @Override
        public void onProviderDisabled(String s) {

        }
    }

}

Этот поток вызывается в этом методе, расположенном в классе Java:

public void inviaGps(View v) {
    if ((ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) ||  ActivityCompat.checkSelfPermission(this, Manifest.permission.INTERNET) != 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.

        Toast t = Toast.makeText(this, "Devi abilitare i permessi", Toast.LENGTH_SHORT);
        t.show();
        return;
    }
    trackThread p = new trackThread(getApplicationContext());
    new Thread(p).start();
}

этот метод запускается щелчком по кнопке простого и распространенного действия.

Я думаю, что проблема вызвана неправильным использованием контекста (извините, я не настолько разбираюсь в кодировании Android). P.S .: Я также попытался добавить простой Log.e под locationManager.requestLocationUpdates() для отладки и попытаться разобраться в проблеме. Мне было показано

Это не очень хорошо работает. Что же происходит не так?

greenapps 18.05.2018 18:46

Ты прав. Проблема в том, что метод onLocationChanged вызывается и вызывается, но он не работает должным образом.

riccardo 18.05.2018 19:00

Где вы создаете и начинаете этот текст? В каком контексте?

greenapps 18.05.2018 19:13

Вы все еще не сказали, что не работает должным образом.

greenapps 18.05.2018 19:14

Извините, я его отредактировал. Подскажите, понятно ли. Однако спасибо

riccardo 18.05.2018 20:28

Вы должны создать службу, которая отправляет координаты в БД. Его аналогичный код с бонусным сервисом может запускаться при закрытии приложения. Если вы использовали объединенный поставщик, вы можете указать временной интервал или минимальное расстояние для следующей координаты. С объединенным провайдером вы получаете местоположение и просто записываете в БД.

danny117 18.05.2018 20:35

Нет. Вы все еще не сказали, в чем проблема.

greenapps 18.05.2018 20:37

Я нажимаю кнопку, которая должна вызвать inviaGps, затем trackThread, run и, наконец, onLocationChanged. Это не работает, потому что, хотя я перемещал свой смартфон, в мою БД не были отправлены координаты ...

riccardo 18.05.2018 20:53
, even though I moved my smartphone, no coordinates has been sent to my DB... ну может вы их неправильно отправили? Но актуальна ли отправка в базу данных? Разве все не начинается с того, что onLocationChanged() запускается слушателем? Вы должны сообщить нам об этом для начала.
greenapps 19.05.2018 10:20

Я уверен, что операции, связанные с БД, исправлены. Все начинается с onLocationChanged (), который, как вы сказали, должен запускаться слушателем.

riccardo 20.05.2018 12:42
0
10
177
0

Другие вопросы по теме