본문 바로가기
안드로이드 자바

[JAVA][Android]네이버 지도 앱, 모바일 웹에서 특정 좌표 띄우기

by teamnova 2024. 7. 3.
728x90

오늘은 특정 좌표(서울특별시청)가 네이버 지도 앱 또는 모바일 웹에서 띄워지는 예시를 만들어 보겠습니다.

 

 

manifest 정보 추가

manifest에 android.intent.action.VIEW 액션과 nmap 스키마를 설정한 intent <queries> 를 추가해주세요.

 

 

레이아웃 xml 파일 코드(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/move_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="지도 보여주기"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

액티비티 자바 코드

public class MainActivity extends AppCompatActivity {

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

        double latitude = 37.5664056; // 서울특별시청 위도
        double longitude = 126.9778222; // 서울특별시청 경도

        Button move_button=findViewById(R.id.move_button);
        move_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 버튼을 누를시
                // 네이버지도 앱이 있다면 지도앱으로 이동
                // 지도앱이 없다면 브라우저의 네이버지도로 이동
                move_naver_map(latitude,longitude);
            }
        });
    }

    private void move_naver_map(double latitude, double longitude) { //지도 위치보기
        try {
            String text = URLEncoder.encode("서울특별시청 입니다","UTF-8");//지도 볼때 같이 보여줄 문자열, 문자열을 uri에 넣을수 있도록 인코딩
            String appName = getApplicationContext().getPackageName(); // 앱 패키지명

            // 네이버 지도 uri 스키마 생성
            String uriString = String.format("nmap://place?lat=%f&lng=%f&name=%s&appname=%s",
                    latitude, longitude, text, appName); // intent로 외부앱 요청을 하기위한 uri 주소

            // 인텐트 생성 및 설정
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uriString));
            intent.addCategory(Intent.CATEGORY_BROWSABLE);

            // 네이버 지도 앱이 설치되어 있는지 확인
            List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
            if (list == null || list.isEmpty()) {
                // 네이버 지도 앱이 설치되어 있지 않은 경우, 웹 브라우저로 네이버 지도 웹사이트 열기
                intent.setData(Uri.parse("https://map.naver.com/?lat=" + latitude + "&lng=" + longitude));
            }

            //intent 정보에 따른 지도 보여주기 실행
            startActivity(intent);
        } catch (UnsupportedEncodingException e) {
            Toast.makeText(MainActivity.this,"지원되지않는 인코딩 형식입니다",Toast.LENGTH_SHORT).show();
        }
    }
}

 

 

실행 영상

네이버 지도 앱이 기기에 있는 경우

 

 

네이버 지도 앱이 기기에 없는 경우

 

 

 

특정 좌표가 네이버 지도 앱 또는 모바일 웹에서 띄워지는 것을 확인할 수 있습니다.