如何使用 Google 地图意图选择位置

Dan*_*son 6 android google-maps google-maps-markers android-intent

我正在创建一个应用程序,用户可以在其中创建在校园内发生的事件。我希望有一种方法让用户可以通过按下按钮在地图上选择一个位置。该按钮将打开一个谷歌地图意图,然后用户可以放置一个标记或将一个标记拖到他们想要的位置。一旦选定,坐标将作为一对双打返回。然后我会将这些存储在一个数据库中,该数据库显示另一个活动的点数。

我需要知道如何在地图意图上选择一个位置并返回选定的坐标。这是此活动的代码。我已经删除了一些无关的日期选择方法等。

public class CreateEvent extends Activity {

    EditText startTimeField;
    EditText endTimeField;
    EditText startDateField;
    EditText endDateField;
    EditText locationField;
    Calendar startTime;
    Calendar endTime;
    ImageView mImageView;
    Bitmap imageBitmap;
    Button capture;
    Button locationButton;
    static final int REQUEST_IMAGE_CAPTURE = 1;

    SimpleDateFormat time_format = new SimpleDateFormat("hh:mm a", Locale.US);
    SimpleDateFormat date_format = new SimpleDateFormat("MM/dd/yyyy", Locale.US);

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

        startTime = new GregorianCalendar();
        endTime = new GregorianCalendar();
        endTime.set(Calendar.HOUR, endTime.get(Calendar.HOUR) + 1);

        startTimeField = (EditText)this.findViewById(R.id.startTimeField);
        endTimeField = (EditText)this.findViewById(R.id.endTimeField);
        startDateField = (EditText)this.findViewById(R.id.startDateField);
        endDateField = (EditText)this.findViewById(R.id.endDateField);
        locationField = (EditText) this.findViewById(R.id.locationField);
        startTimeField.setKeyListener(null);
        endTimeField.setKeyListener(null);
        startDateField.setKeyListener(null);
        endDateField.setKeyListener(null);
        startTimeField.setText(time_format.format(startTime.getTime()));
        endTimeField.setText(time_format.format(endTime.getTime()));
        startDateField.setText(date_format.format(startTime.getTime()));
        endDateField.setText(date_format.format(endTime.getTime()));

        mImageView = (ImageView) this.findViewById(R.id.eventPhoto);


        if(savedInstanceState != null){
            imageBitmap = savedInstanceState.getParcelable("eventPhoto");
            if(imageBitmap != null){
                mImageView.setImageBitmap(imageBitmap);
            }
        }

        capture = (Button) findViewById(R.id.photoButton);
        capture.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
            }
        });

        locationButton = (Button) findViewById(R.id.locationButton);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            imageBitmap = (Bitmap) extras.get("data");
            mImageView.setImageBitmap(imageBitmap);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outstate){
        outstate.putParcelable("eventPhoto", imageBitmap);
        super.onSaveInstanceState(outstate);

    public void makeEvent(View view){
        Intent intent = new Intent();
        intent.putExtra("Event", new Event(imageBitmap, ((EditText)findViewById(R.id.eventField)).getText().toString(),
                ((EditText)findViewById(R.id.locationField)).getText().toString(), startTime.getTime(),
                endTime.getTime(), ((EditText)findViewById(R.id.descriptionField)).getText().toString()));
//        intent.putExtra("Bitmap", );
//        intent.putExtra("Name", );
//        intent.putExtra("Location", );
//        intent.putExtra("Start", );
//        intent.putExtra("End", );
//        intent.putExtra("Description", );
        setResult(RESULT_OK, intent);
        finish();
    }
}
Run Code Online (Sandbox Code Playgroud)

与此相关的所有其他问题都有非常过时的答案。谢谢你的帮助。

编辑 这是我目前用于意图的代码:

 locationButton = (Button) findViewById(R.id.locationButton);
    locationButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Uri gmmIntentUri = Uri.parse("geo:42.273856,-71.805976?z=16");
            Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
            mapIntent.setPackage("com.google.android.apps.maps");
            if (mapIntent.resolveActivity(getPackageManager()) != null) {
                startActivity(mapIntent);
            }
    }});
Run Code Online (Sandbox Code Playgroud)