对于当前项目,我需要对纬度和经度数据做一些事情。
我正在使用 Google maps api (不是地图应用)。
项目创建后,我选择使用Google Maps Activity模板。
该项目包含MainActivity和MapsActivity。 (min.api 19)
我正在寻找一种从用户在地图上触摸的位置获取经度和纬度的方法。
需要在MapsActivity中选择所选位置的经度和纬度,然后传递给MainActivity(使用CONSTANTS或意图?) 最后,当用户选择位置并成功传递数据时,用户将返回MainActivity。
如何使用Google Maps API for Android获取MapsActivity上的所选位置,并将所选位置传回MainActivity?
答案 0 :(得分:2)
使用startActivityForResult()
打开MapsActivity,然后在Google地图上使用点击监听器,让用户选择一个点。
这是一个简单的例子。
首先,MainActivity,按下按钮打开MapsActivity,并显示Toast,其中包含用户在MapsActivity中选择的点的纬度/经度:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_two);
Button button = (Button) findViewById(R.id.button_pick_point);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pickPointOnMap();
}
});
}
static final int PICK_MAP_POINT_REQUEST = 999; // The request code
private void pickPointOnMap() {
Intent pickPointIntent = new Intent(this, MapsActivity.class);
startActivityForResult(pickPointIntent, PICK_MAP_POINT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PICK_MAP_POINT_REQUEST) {
// Make sure the request was successful
if (resultCode == RESULT_OK) {
LatLng latLng = (LatLng) data.getParcelableExtra("picked_point");
Toast.makeText(this, "Point Chosen: " + latLng.latitude + " " + latLng.longitude, Toast.LENGTH_LONG).show();
}
}
}
}
然后,MapsActivity使用GoogleMap.OnMapClickListener
来获取用户选择的点的纬度/经度,并将数据传递回MainActivity。请注意,LatLng对象可以作为额外传递,因为它实现了Parcelable接口。
public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
Intent returnIntent = new Intent();
returnIntent.putExtra("picked_point",latLng);
setResult(Activity.RESULT_OK,returnIntent);
finish();
}
});
}
}