Android: слушатель местоположения - PullRequest
1 голос
/ 19 января 2012

Я пытаюсь включить прослушиватель местоположения для предоставления информации, если телефон переместился более чем на определенное расстояние, когда установлен флажок. Для теста я просто хочу увеличить счетчик на 1, если я переместился более чем на 1 метр за 10 секунд.

Я могу заставить слушателя местоположения работать, и флажок на слушателе щелчка работает. Тем не менее, у меня возникают проблемы, пытаясь удалить locationlistener, когда флажок не установлен. Кроме того, я получаю несколько приращений, когда перепроверяю флажок. Ниже мой код. Я вызываю метод testgps () из метода OnCreate () моего класса.

Если у вас есть какие-либо предложения, они будут оценены.

Thx

private void testgps() {


    final CheckBox gps_enb = (CheckBox) findViewById(R.id.checkBox_gps);

    gps_enb.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            LocationManager loc = (LocationManager) getSystemService(LOCATION_SERVICE);


            if (((CheckBox) v).isChecked()) {

                long minTime = 10000;
                float minDistance = 1;

                loc.requestLocationUpdates( LocationManager.GPS_PROVIDER, minTime,minDistance, new LocationListener() {

                    @Override
                    public void onStatusChanged(String provider, int status, Bundle extras) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onProviderEnabled(String provider) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onProviderDisabled(String provider) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onLocationChanged(Location location) {
                        TextView count = (TextView) findViewById(R.id.textView_GPS_Listener_debug);
                        int buffer = new Integer(count.getText().toString()).intValue() + 1;

                        StringBuilder count_up = new StringBuilder();
                        count_up.append(buffer);
                        count.setText(count_up);

                    }
                });

                Toast.makeText(QuizSettingsActivity.this, "True",
                        Toast.LENGTH_SHORT);
                Toast.makeText(QuizSettingsActivity.this, "Selected", Toast.LENGTH_SHORT).show();
            } else {
                loc = null;
                Toast.makeText(QuizSettingsActivity.this, "Not selected", Toast.LENGTH_SHORT).show();
            }


        }
    });

Привет, спасибо за помощь. Это то, чем я закончил. Я еще немного покопался в модификаторах без доступа.

private void testgps () {

    final CheckBox gps_enb = (CheckBox) findViewById(R.id.checkBox_gps);//Checkbox to Enable GPS
    final LocationManager loc = (LocationManager)getSystemService(LOCATION_SERVICE);//Declare location mgr

    //Location Listner
    final LocationListener loc_listener= new LocationListener() {

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onLocationChanged(Location location) {
            TextView count = (TextView) findViewById(R.id.textView_GPS_Listener_debug);
            int buffer = new Integer(count.getText().toString()).intValue() + 1;

            StringBuilder count_up = new StringBuilder();
            count_up.append(buffer);
            count.setText(count_up);

        }
    };

    gps_enb.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            boolean checked = gps_enb.isChecked();


            if (checked==true) {

                long minTime = 10000;
                float minDistance = 1;
                loc.requestLocationUpdates( LocationManager.GPS_PROVIDER, minTime,minDistance, loc_listener);//Provide Location Updates

                Toast.makeText(QuizSettingsActivity.this, "Selected", Toast.LENGTH_SHORT).show();
            }; 



            if (checked!=true){
                loc.removeUpdates(loc_listener);
                Toast.makeText(QuizSettingsActivity.this, "Not selected", Toast.LENGTH_SHORT).show();
            }


        }
    });

1 Ответ

3 голосов
/ 19 января 2012

Вы можете добавить метод, который удаляет слушателя следующим образом:

private void removeMyLocationListener(LocationManager loc){
    loc.removeUpdates(your listener);
}

, и вы позвоните в OnCheckChangeListener, если ваш флажок не установлен следующим образом:

chkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if(!isChecked){removeMyLocationListener(LocationManager loc);}
            }
        });
...