android中的位置变化

android中的位置变化,android,google-maps-android-api-2,Android,Google Maps Android Api 2,我正在开发一个应用程序,我想在地图上显示我的当前位置,它会显示,但如果我更改位置,它会显示以前的位置,请在我的代码中告诉我错误 我的代码 public class GetLatLongForTPActivity extends FragmentActivity implements LocationListener{ GoogleMap _googleMap; static final LatLng SEC = new LatLng(17.433189,78.502223); sta

我正在开发一个应用程序,我想在地图上显示我的当前位置,它会显示,但如果我更改位置,它会显示以前的位置,请在我的代码中告诉我错误

我的代码

public class GetLatLongForTPActivity extends FragmentActivity implements LocationListener{

 GoogleMap _googleMap;




static final LatLng SEC = new LatLng(17.433189,78.502223);
static final LatLng Safilguda  = new LatLng(17.464166,78.536156);
static final LatLng Fathe  = new LatLng(17.455932,78.450132);
LatLng myPosition;
LatLongDetails latLongDetails = new LatLongDetails();;

private EditText timeEdit;
private Button submitBtn;
private Button cancelBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_get_lat_long_for_tp);

    timeEdit = (EditText)findViewById(R.id.timeId);
    submitBtn = (Button)findViewById(R.id.subId);   

     /*Intent intent = getIntent();
     String anotherLAT=intent.getStringExtra("LAT");
     String anotherLNG=intent.getStringExtra("LNG");

    */
    ArrayList<HashMap<String, String>> arl = (ArrayList<HashMap<String, String>>) 
                                              getIntent().getSerializableExtra("arrayList");
    Log.e(" NEW LATLONG1",arl.get(0).toString());
     Log.e(" NEW LATLONG2",arl.get(1).toString());
     Log.e(" NEW LATLONG3",arl.get(2).toString());

    _googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(
            R.id.map)).getMap(); 
    if(_googleMap==null){
        Toast.makeText(getApplicationContext(), "Google Map Not Available", Toast.LENGTH_LONG).show();
        }
        LocationManager locationManger = (LocationManager)getSystemService(LOCATION_SERVICE);
        Criteria criteria=new Criteria();

        Marker perth = _googleMap.addMarker(new MarkerOptions()

                                  .position(SEC)
                                   .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                                  .flat(true));

        /*Marker Safilg = _googleMap.addMarker(new MarkerOptions()

        .position(Safilguda)
         .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
        .flat(true));
        Marker Saf = _googleMap.addMarker(new MarkerOptions()

        .position(Fathe)
         .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
        .flat(true));*/
        String provider = locationManger.getBestProvider(criteria, true);
        Location location = locationManger.getLastKnownLocation(provider);
        if(location!=null){
            double latitude = location.getLatitude();
            double langitude = location.getLongitude();


            latLongDetails.setLat(latitude);
            latLongDetails.setLongi(langitude);

            Log.e("lat",""+ latLongDetails.getLat());
            Log.e("long", ""+latLongDetails.getLongi());

            LatLng latlang = new LatLng(latitude, langitude);
            LatLngBounds curScreen = _googleMap.getProjection().getVisibleRegion().latLngBounds;
            curScreen.contains(latlang);
            myPosition = new LatLng(latitude, langitude);




_googleMap.moveCamera(CameraUpdateFactory.newLatLng(myPosition)); 
                _googleMap.addMarker(new MarkerOptions().position(myPosition).title("start"));

                //_googleMap.setOnMarkerClickListener(GetLatLongForTPActivity.this);

                submitBtn.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                        String       
                      clreatime=timeEdit.getText().toString().trim();



                        latLongDetails.setClearTime(clreatime);
                        Log.e("time", 
                      latLongDetails.getClearTime());
                        new       
             SendLatLongValAsync(GetLatLongForTPActivity.this).execute(latLongDetails);


                    }
                });



            }

    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        //getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

    }

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

    }

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

    }

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

    }
公共类GetLatLongForTPActivity扩展FragmentActivity实现LocationListener{
谷歌地图;
静态最终车床长度=新车床长度(17.433189,78.502223);
静态最终板条Safilguda=新板条(17.464166,78.536156);
静态最终板条法=新板条法(17.455932,78.450132);
车床位置;
LatLongDetails LatLongDetails=新LatLongDetails();;
私人编辑文本时间编辑;
私人按钮提交;
私人按钮取消;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u get\u lat\u long\u for\u tp);
timeEdit=(EditText)findViewById(R.id.timeId);
submitBtn=(按钮)findViewById(R.id.subId);
/*Intent=getIntent();
String anotherLAT=intent.getStringExtra(“LAT”);
字符串anotherLNG=intent.getStringExtra(“LNG”);
*/
ArrayList arl=(ArrayList)
getIntent().getSerializableExtra(“arrayList”);
Log.e(“NEW LATLONG1”,arl.get(0.toString());
Log.e(“NEW LATLONG2”,arl.get(1.toString());
Log.e(“NEW LATLONG3”,arl.get(2.toString());
_googleMap=((SupportMapFragment)getSupportFragmentManager().findFragmentById(
R.id.map)).getMap();
如果(_googleMap==null){
Toast.makeText(getApplicationContext(),“谷歌地图不可用”,Toast.LENGTH_LONG.show();
}
LocationManager LocationManager=(LocationManager)getSystemService(LOCATION\u服务);
标准=新标准();
Marker perth=\u googleMap.addMarker(新的MarkerOptions()
.职位(秒)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.平坦(真实));
/*Marker Safilg=\u googleMap.addMarker(新的MarkerOptions()
.职位(萨菲尔古达)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.平坦(真实));
Marker Saf=\u googleMap.addMarker(新的MarkerOptions()
.职位(法特)
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.平坦(真实))*/
字符串提供程序=locationManger.getBestProvider(条件为true);
Location Location=LocationManager.getLastKnownLocation(提供者);
如果(位置!=null){
双纬度=location.getLatitude();
double langudent=location.getLongitude();
latLongDetails.setLat(纬度);
latLongDetails.setLongi(朗吉特);
Log.e(“lat”和“+latLongDetails.getLat());
Log.e(“long”,“latLongDetails.getLongi());
LatLng latlang=新LatLng(纬度、纬度);
LatLngBounds光标屏幕=_googleMap.getProjection().getVisibleRegion().LatLngBounds;
包含(拉特朗);
myPosition=新纬度(纬度、纬度);
_googleMap.moveCamera(CameraUpdateFactory.newLatLng(myPosition));
_addMarker(新的MarkerOptions().position(myPosition).title(“开始”);
//_setOnMarkerClickListener(GetLatLongForTPActivity.this);
submitBtn.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
一串
clreatime=timeEdit.getText().toString().trim();
latLongDetails.setClearTime(clreatime);
Log.e(“时间”,
latLongDetails.getClearTime());
新的
SendLatLongValAsync(GetLatLongForTPActivity.this).execute(latLongDetails);
}
});
}
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
//getMenuInflater().充气(R.menu.main,menu);
返回true;
}
@凌驾
已更改位置上的公共无效(位置){
//TODO自动生成的方法存根
}
@凌驾
公共无效onProviderDisabled(字符串提供程序){
//TODO自动生成的方法存根
}
@凌驾
公共无效onProviderEnabled(字符串提供程序){
//TODO自动生成的方法存根
}
@凌驾
public void onStatusChanged(字符串提供程序、int状态、Bundle extra){
//TODO自动生成的方法存根
}

您在获取位置详细信息时使用了
getLastKnownLocation()
方法。此方法始终返回最后知道的坐标。因此,我建议您对此行进行注释
location location=LocationManager.getLastKnownLocation(提供者);
,然后它将正常运行。

要更新您的位置,您必须将您的位置侦听器注册到位置管理器。并使用覆盖方法onLocationChanged()获取最新位置。
请参考以下内容设置您的
活动:

public class BasicMapActivity_new extends FragmentActivity implements LocationListener {

private GoogleMap mMap;
private LocationManager locationManager;
private String provider;
Double Latitude,longitude;

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

    mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map2)).getMap();
    mMap.setMyLocationEnabled(true);


    LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
    boolean enabledGPS = service
            .isProviderEnabled(LocationManager.GPS_PROVIDER);
    boolean enabledWiFi = service
            .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    if (!enabledGPS) {
        Toast.makeText(BasicMapActivity_new.this, "GPS signal not found", Toast.LENGTH_LONG).show();
        Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        startActivity(intent);
    }
    else if(!enabledWiFi){
           Toast.makeText(BasicMapActivity_new.this, "Network signal not found", Toast.LENGTH_LONG).show();
           Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
           startActivity(intent);
    }

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    // Define the criteria how to select the locatioin provider -> use
    // default
    Criteria criteria = new Criteria();
    provider = locationManager.getBestProvider(criteria, false);
    Location location = locationManager.getLastKnownLocation(provider);

    // Initialize the location fields
    if (location != null) {
        onLocationChanged(location);
    } else {

        //do something
    }
    setUpMap();
}



@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
}

@Override
protected void onResume() {
    super.onResume();
     locationManager.requestLocationUpdates(provider, 400, 1, this);
    setUpMapIfNeeded();
}

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.map2))
                .getMap();
        mMap.setMyLocationEnabled(true);

        // Check if we were successful in obtaining the map.
        if (mMap != null) {
            setUpMap();
        }
    }
}



private void setUpMap() {
    mMap.getUiSettings().setCompassEnabled(true);
    mMap.getUiSettings().setTiltGesturesEnabled(true);
    mMap.getUiSettings().setRotateGesturesEnabled(true);
    mMap.getUiSettings().setScrollGesturesEnabled(true);
    mMap.getUiSettings().setZoomControlsEnabled(true);
    mMap.getUiSettings().setZoomGesturesEnabled(true);
  }

 Marker startPerc=null;
 Location old_one;
    @Override
    public void onLocationChanged(Location location) {

        double lat =  location.getLatitude();
        double lng = location.getLongitude();
        LatLng coordinate = new LatLng(lat, lng)
        startPerc = mMap.addMarker(new MarkerOptions()
             .position(coordinate)
             .title("Current Location")
             .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));  

  mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(coordinate, 18.0f))
    }


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

}

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

}

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

}

 }
不要忘记将权限添加到
manifest.xml
文件中

  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


那么我将如何获得lat longvalues@Durga,有一个名为
onLocationChanged(Location-Location)
的方法。此方法由系统自动调用。@Durga,您正在onCreate()方法中执行位置操作,这不太好。我建议您将其移动到
onLocation()中
method。这是正确的方法。@Durga,这需要一段时间,请稍候。你能将你的代码发送到我个人资料中提到的电子邮件中吗?这样,我可以更快地完成。我想需要