2015-05-02 96 views
0

我一直在编码使用GPS传感器,让您的位置和地图中心的在你身边一个应用程序,我一直使用funcion:为什么onLocationChanged函数不适合我?

final LocationListener locationListenerFunc = new LocationListener() 

,但它不是为我工作,我一直在进行几个小时,但我仍然没有看到文本的变化(我改变它,当你进入onLocationChanged方法, 我用例子做的一切。

这里是我的代码> 什么问题?

package greenroadproject.greenroadproject2; 

import android.content.Context; 
import android.location.Criteria; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 
import android.text.format.Time; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.CameraPosition; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class MapsActivity extends FragmentActivity { 

    private GoogleMap mMap; // Might be null if Google Play services APK is not available. 
    private Button startTrackingButton; 
    private Button stopTrackingButton; 
    private TextView mainText; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.map_fragment_layout); 

     //GPS LOCATION MANAGER 
     final LocationManager manager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 
     final LocationListener locationListenerFunc = new LocationListener() { 

      @Override 
      public void onLocationChanged(Location location) { 
       /// HERE IS MY PROBLEM HE DOESN'T GO IN HERE 
       /// HERE IS MY PROBLEM HE DOESN'T GO IN HERE 
       mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
         new LatLng(location.getLatitude(), location.getLongitude()), 13)); 

       CameraPosition cameraPosition = new CameraPosition.Builder() 
         .target(new LatLng(location.getLatitude(), location.getLongitude()))  // Sets the center of the map to location user 
         .zoom(17)     // Sets the zoom 
         .bearing(90)    // Sets the orientation of the camera to east 
         .tilt(30)     // Sets the tilt of the camera to 30 degrees 
         .build();     // Creates a CameraPosition from the builder 
       mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 



       Time today = new Time(Time.getCurrentTimezone()); 
       today.setToNow(); 

       mainText.setText("gotNew Location at: "+today.format("%k:%M:%S")); 
       /// 
      } 

      @Override 
      public void onStatusChanged(String provider, int status, Bundle extras) { 

      } 

      @Override 
      public void onProviderEnabled(String provider) { 

      } 

      @Override 
      public void onProviderDisabled(String provider) { 

      } 
     }; 


     //casting to button 
     startTrackingButton = (Button) findViewById(R.id.BTStartTracking); 
     stopTrackingButton = (Button) findViewById(R.id.BTStopTracking); 
     mainText = (TextView) findViewById(R.id.TVMainTextView); 

     //setting up map 
     setUpMapIfNeeded(); 

     //start tracking button touch listener 
     stopTrackingButton.setOnClickListener(new Button.OnClickListener() { 
      public void onClick(View v) { 
       //Do stuff here 
       centerMapOnMyLocation(); //centers the map on user location 
       mainText.setText("user location enabled"); 

      } 
     }); 

     //stop tracking button touch listener 
     startTrackingButton.setOnClickListener(new Button.OnClickListener() { 
      public void onClick(View v) { 
       //Do stuff here 
       Time today = new Time(Time.getCurrentTimezone()); 
       today.setToNow(); 

       mainText.setText("first time is: "+today.format("%k:%M:%S")); 

       manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
         3000, 0, locationListenerFunc); 


      } 
     }); 




    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     setUpMapIfNeeded(); 
    } 

    /** 
    * Sets up the map if it is possible to do so (i.e., the Google Play services APK is correctly 
    * installed) and the map has not already been instantiated.. This will ensure that we only ever 
    * call {@link #setUpMap()} once when {@link #mMap} is not null. 
    * <p/> 
    * If it isn't installed {@link SupportMapFragment} (and 
    * {@link com.google.android.gms.maps.MapView MapView}) will show a prompt for the user to 
    * install/update the Google Play services APK on their device. 
    * <p/> 
    * A user can return to this FragmentActivity after following the prompt and correctly 
    * installing/updating/enabling the Google Play services. Since the FragmentActivity may not 
    * have been completely destroyed during this process (it is likely that it would only be 
    * stopped or paused), {@link #onCreate(Bundle)} may not be called again so we should call this 
    * method in {@link #onResume()} to guarantee that it will be called. 
    */ 
    private void setUpMapIfNeeded() { 
     // Do a null check to confirm that we have not already instantiated the map. 
     if (mMap == null) { 
      // Try to obtain the map from the SupportMapFragment. 
      mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) 
        .getMap(); 
      // Check if we were successful in obtaining the map. 
      if (mMap != null) { 
       //setUpMap(); 
       centerMapOnMyLocation(); //centers the map on user location 
      } 
     } 
    } 

    /** 
    * This is where we can add markers or lines, add listeners or move the camera. In this case, we 
    * just add a marker near Africa. 
    * <p/> 
    * This should only be called once and when we are sure that {@link #mMap} is not null. 
    */ 
    private void setUpMap() { 
     mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
    } 



    private void centerMapOnMyLocation() { 

     LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 

     Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false)); 

     //sets text > 
     double Lad = location.getLatitude(); 
     double Long = location.getLongitude(); 
     mainText.setText("lat: "+ String.valueOf(Lad)+", "+ "long: " +String.valueOf(Long)); 

     if (location != null) 
     { 
      mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(
        new LatLng(location.getLatitude(), location.getLongitude()), 13)); 

      CameraPosition cameraPosition = new CameraPosition.Builder() 
        .target(new LatLng(location.getLatitude(), location.getLongitude()))  // Sets the center of the map to location user 
        .zoom(17)     // Sets the zoom 
        .bearing(90)    // Sets the orientation of the camera to east 
        .tilt(30)     // Sets the tilt of the camera to 30 degrees 
        .build();     // Creates a CameraPosition from the builder 
      mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

     } 

    } 


} 

回答

1

更改LocationManager.GPS_PROVIDERLocationManager.NETWORK_PROVIDER

+0

谢谢你哟! –

+0

这取决于您的准确度要求 - 如果您希望高精确度的位置将最近的位置返回到最近的建筑物位置(例如5-30米),则应使用GPS_PROVIDER。但是,如果您能够以更粗糙的精度生活,NETWORK_PROVIDER通常比GPS更快地返回新的位置,特别是在室内时。 –

相关问题