2012-01-19 2 views
1

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

Я могу получить работу приемника местоположения и установить флажок onclick listener. Тем не менее, у меня возникают проблемы с удалением установщика местоположений, когда флажок не установлен. Кроме того, я получаю несколько приращений, когда перепроверяю поле. Ниже мой код. Я вызываю метод 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(); 
      } 


     } 
    }); 

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

частного недействительный 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(); 
      } 


     } 
    }); 

ответ

3

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

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);} 
      } 
     }); 
+0

Привет, помогите. Я ворвался в модификаторы Non-Access и смог заставить его работать: над этим я закончил: –