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,这需要一段时间,请稍候。你能将你的代码发送到我个人资料中提到的电子邮件中吗?这样,我可以更快地完成。我想需要