如何从地图活动中获取选定的位置并将其传递给父活动?

时间:2017-04-06 20:45:44

标签: java android google-maps-android-api-2

对于当前项目,我需要对纬度和经度数据做一些事情。

我正在使用 Google maps api (不是地图应用)。
项目创建后,我选择使用Google Maps Activity模板。 该项目包含MainActivity和MapsActivity。 (min.api 19)

我正在寻找一种从用户在地图上触摸的位置获取经度和纬度的方法。

需要在MapsActivity中选择所选位置的经度和纬度,然后传递给MainActivity(使用CONSTANTS或意图?) 最后,当用户选择位置并成功传递数据时,用户将返回MainActivity。

如何使用Google Maps API for Android获取MapsActivity上的所选位置,并将所选位置传回MainActivity?

1 个答案:

答案 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();
            }
        });
    }
}