2012-01-19 145 views
1

我試圖啓用位置偵聽器來提供信息,如果手機移動超過一定距離時複選框被選中。對於測試,如果我在10秒內移動超過1米,我只想將計數器增加1。Android:位置偵聽器

我能夠讓位置監聽器工作,並使複選框onclick監聽器工作。但是,我在試圖刪除位置偵聽器時沒有選中該框。另外,當我重新檢查盒子時,我得到了多個增量。以下是我的代碼。我從我的Class的OnCreate()方法調用testgps()方法。

如果您有任何建議,他們將不勝感激。

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

嗨,感謝幫助。我挖入非訪問修飾符,並能夠得到它的工作:以上是我最終與: –

相關問題