반응형

Places API Web Service를 이용하여 현재 위치 주변에 있는 음식점 같은 장소 정보를 획득하여 주변에 위치를 아래 화면처럼 빨간색 마커로 출력해줍니다.



마커 하나를 선택하면 해당 장소의 이름과 주소를 정보 창에 보여주는데 이 정보를 다른 액티비티로 전송하는 것을 구현해보았습니다.





해당 정보 창을 선택하면





정보 박스에 있던 해당 정보를 새로운 액티비티에서 보여줍니다.





프로그래밍은 다음 포스팅의 코드를 기반으로 작성했습니다.


Places API Web Service를 사용하여 Android Google Map에 현재 위치 주변의 음식점 표시하기

http://webnautes.tistory.com/1080




onMapReady 메소드에서 정보 창을 클릭시 인텐트를 이용하여 새로운 액티비티 실행시 정보를 전달하도록 다음처럼 작성합니다.


       mGoogleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {

           @Override
           public void onInfoWindowClick(Marker marker) {

               Intent intent = new Intent(getBaseContext(), NewActivity.class);

               String title = marker.getTitle();
               String address = marker.getSnippet();

               intent.putExtra("title", title);
               intent.putExtra( "address", address);

               startActivity(intent);
           }
       });





새로운 액티비티의 코드와 레이아웃을 작성합니다.


NewActivity.java

package com.tistory.webnautes.googlemapsandroidapiexample;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

/**
* Created by webnautes on 2017-11-27.
*/

public class NewActivity extends AppCompatActivity {


   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.newactivity);


       String title = "";
       String address = "";

       Bundle extras = getIntent().getExtras();

       if (extras == null) {
           title = "error";
       }
       else {

           title = extras.getString("title");
           address = extras.getString("address");
       }

       TextView textView = (TextView) findViewById(R.id.textView_newActivity_contentString);

       String str = title + '\n' + address + '\n';
       textView.setText(str);

   }
}




newactivity.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical" android:layout_width="match_parent"
   android:layout_height="match_parent">

   <TextView
       android:text="TextView"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:id="@+id/textView_newActivity_contentString" />

</LinearLayout>




MainActivity에서 NewActivity를 인식할 수 있도록 매니페스트 파일을 다음처럼 수정합니다.


       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>

       <activity android:name=".NewActivity">

       </activity>
   </application>




이제 실행시켜 보면 앞에서 설명한대로 진행이 됩니다.




참고

https://stackoverflow.com/questions/17549372/how-to-get-click-event-of-the-marker-text


반응형

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요.

  1. Test 2017.11.29 18:38

    감사합니다!

  2. 2018.05.09 17:11

    비밀댓글입니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2018.05.09 22:03 신고

      구글이나 github 검색을 하지 않는다면...

      안드로이드 공식 문서나 라이브러리 문서를 가지고 공부해야 하지 않을까 싶네요..


      그리고 질문하신건..

      아래 코드에서 title에 따라 다른 액티비티를 보여주면 될 듯합니다.

      mGoogleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {

      @Override
      public void onInfoWindowClick(Marker marker) {

      Intent intent = new Intent(getBaseContext(), NewActivity.class);

      String title = marker.getTitle();
      String address = marker.getSnippet();

      intent.putExtra("title", title);
      intent.putExtra( "address", address);

      startActivity(intent);
      }
      });

  3. 초보 2018.11.26 02:16

    안녕하세요.
    Places API Web Services에서 글을 남기고 답글을 달아주셔서 참고하려고 온 초보입니다.
    덕분에 Intent를 통해 다른 Activity에 정보를 넘기는 방법에 대해서 알았습니다. 감사합니다.
    그런데 클릭이 아닌 반경 내에 표시되어 있는 Marker의 정보를 List로 넘기고 싶은데 이러한 Method는 따로 없을 까요?
    저 같은 경우는 1Km 반경을 탐색하고 있습니다.

    잘 배우고 있습니다. 감사합니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2018.11.26 07:54 신고

      다음 포스팅을 참고하여 일정거리 내의 마커를 필터링하세요.

      Android Google Map에서 목적지 Marker와 이동 중인 현재 위치 간의 거리 계산해서 보여주기
      https://webnautes.tistory.com/1165

  4. 2019.11.08 15:11

    비밀댓글입니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.09 15:46 신고

      구글에서 제공하는 정보외에 추가하려면 별도의 정보를 데이터베이스에 저장해야 합니다.

  5. ㅂㅂ 2019.11.24 16:45


    mGoogleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {

    @Override
    public void onInfoWindowClick(Marker marker) {

    Intent intent = new Intent(getBaseContext(), NewActivity.class);

    String title = marker.getTitle();
    String address = marker.getSnippet();

    intent.putExtra("title", title);
    intent.putExtra( "address", address);

    startActivity(intent);
    }
    });

    부분은 그냥 onMapReady 메소드 안에 넣으면 되는건가요??

  6. 2019.11.24 19:38

    비밀댓글입니다

  7. 2019.11.24 20:53

    비밀댓글입니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.25 08:25 신고

      포스트대로 구현하면 어떤 마커를 클릭했는지 파라미터로 리턴해줍니다.

  8. 메르시 2019.11.25 00:38

    제목이랑 주소 말고 구글에서 제공하는 기본 사항이 또 뭐가 있나요? 구글링해도 찾기 힘드네요

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.25 08:30 신고

      사용한 라이브러리에서는 장소 이름과 주소만 제공해줍니다.

      라이브러리는 구글의 웹용 Place API를 사용하여 만든 것인데.. 제공하는 내용은 다음 링크에 있습니다.

      https://developers.google.com/places/web-service/details

    • ㅂㅂ 2019.11.25 12:49

      그럼 제목이나 주소 말고 그 장소의 번호나 영업시간 등을 써놓으려면 기본 라이브러리에는 없고 별도의 데이터베이스를 사용해야한다는 말씀이신가요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.25 21:26 신고

      별도의 데이터베이스를 찾아보는게 좋을듯합니다.

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.25 21:28 신고

      구글에서 안드로이드용으로 상세한 장소 정보를 제공하는 정식 API는 아직 없는 듯합니다.

  9. 로라 2019.11.25 13:05

    저 예시상으로 다음 화면으로 갈때
    이름 : 동아리
    주소 : 어디어디
    이렇게 앞에다가 목록이름 적어주려면 레이아웃을 어떻게 건드려야하나요?

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.25 21:29 신고

      아래 코드에 장소 이름과 주소가 저장되어 있습니다. 여기에 추가하시면 됩니다.

      String title = marker.getTitle();
      String address = marker.getSnippet();

  10. 김지수 2019.11.26 20:45

    클릭된 장소의 지도를 다음 액티비티에서 이름, 주소와 함께 다시 보여주려면 newactivity를 어떻게 변형시켜야 할까요? 주소와 이름처럼 비슷하게 시도해봤는데 잘 되지 않습니다..ㅜ

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.26 21:06 신고

      지도와 함께 이름 주소를 새로운 액티비티에 보여준다는 건가요?

    • 지수 2019.11.27 08:41

      네 동아리랑 주소가 나온 저 newactivity 화면상에 해당 장소 마커가 찍힌 지도를 한번 더 보여주고 싶어서요

      mainactivity 는 다음과 같이 작성을 했고요
      HashMap<String, String> hashMap = new HashMap<String, String>();
      hashMap.put("key", "value");
      Intent intent = new Intent(this, NewActivity.class);
      intent.putExtra("map", hashMap);
      startActivity(intent);

      받는 newactivity는
      hashMap = HashMap<String, String>()
      intent.getSerializableExtra("map")
      Log.v("HashMapTest", hashMap.get("key"))
      이렇게 추가를 했습니다

      개발자님이 쓰신 https://webnautes.tistory.com/1012intent 글도 참고해 구글링하여 저정도는 썼으나 해결이 안되네요. 에러는 unresolved reference : hashMap
      이렇게 나옵니다. 다른 메소드같은걸 추가해야하는걸까요. 좋은 생각 부탁드립니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.28 09:11 신고

      다음처럼 해보세요..

      1. 전달하는 액티비티
      HashMap<String, String> hashMap = new HashMap<String, String>();
      hashMap.put("id", "webnautes");


      Intent intent = new Intent(MainActivity.this, SecondActivity.class);
      intent.putExtra("hashMap", hashMap);

      startActivity(intent);


      2. 받는 액티비티
      Intent intent = getIntent();
      HashMap<String, String> hashMap = (HashMap<String, String>) intent.getSerializableExtra("hashMap");


      String str = hashMap.get("id");

  11. 2020.06.09 14:15

    비밀댓글입니다

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.06.09 14:21 신고

      intend에 변수별로 추가하여 넘겨주고 받으면 될듯합니다.

      구글에서 다음 키워드로 검색해보세요

      intent startactivity example

+ Recent posts