2017-04-06 52 views
-1

对于目前的项目,我需要用纬度和经度数据做一些事情。如何从地图活动中获取所选位置并将其传递给父级活动?

我正在使用谷歌地图API(不是地图应用程序)。
项目创建完成后,我选择使用Google地图活动模板。 该项目包含一个MainActivity和一个MapsActivity。 (min。api 19)

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

从选定位置的经度和纬度需要在MapsActivity中选择,然后传递给MainActivity(带有CONSTANTS或intent?) 最后,当用户选择位置并成功传递数据时,用户回到MainActivity。

如何使用适用于Android的Google地图API在MapsActivity上获取选定位置,并将选定的位置传递回MainActivity?

回答

1

使用startActivityForResult()为了打开MapsActivity,然后在谷歌地图上使用点击监听器来让用户选择一个点。

这是一个简单的例子。

首先,MainActivity,这在点击一个按钮与纬度/用户选择在MapsActivity点的经度开辟了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(); 
      } 
     }); 
    } 
} 
相关问题