1000sj
SJ CODE
1000sj
전체 방문자
오늘
어제
  • 분류 전체보기
    • Algorithms
      • Crypto
    • Security
      • 네트워크
      • 보안
      • CTF
      • Exploit
    • System Programming
      • Operating System
      • Compiler
      • Device Driver
      • Emulator
      • Parrelel Processing
      • Assembly
    • Application Programming
      • Script
      • Android
    • Cloud Computing
      • Cloud Native
      • Public Cloud
      • Infrastructure
      • Database
      • DevOps
    • TroubleShooting
    • ETC
      • 문화 생활
      • 커뮤니티

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
1000sj

SJ CODE

[Android/Java] naver map api
Application Programming/Android

[Android/Java] naver map api

2021. 6. 19. 17:06

Demo

1. Api Key 발급

https://www.ncloud.com/

 

2. 내위치 가져오기

  • 해당 앱이 권한이 있어야한다.
  • 안드로이드시스템 설정에서 위치서비스가 켜져있어야 한다.

 

dependency 추가

현재 위치를 얻기위해선 LocationProvider라는 표준 라이브러리를 사용해도 되지만 가볍고 더좋은게 google꺼라고 한다

implementation 'com.google.android.gms:play-services-location:16.0.0'

Naver sdk

allprojects {
    repositories {
        google()
        mavenCentral()
        jcenter() // Warning: this repository is going to shut down soon
        maven {
            url 'https://naver.jfrog.io/artifactory/maven/'
        }
    }
}

 

implementation 'com.naver.maps:map-sdk:3.12.0'

 

권한추가, Client id 지정

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.sjcoding.famousrestaurant">

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!--GPS로 정확한 위치정보 가져옴-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!--모바일 폰과 모바일 기지국과의 상대거리 가져옴(대강 가져옴 대신 지하나 장소에 상관없이)-->

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.FamousRestaurant"
        android:foregroundServiceType="location">
        <meta-data
            android:name="com.naver.maps.map.CLIENT_ID"
            android:value="CLIENT_ID" />
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

 

MainActivity.java

package com.sjcoding.famousrestaurant;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;

import com.naver.maps.map.LocationTrackingMode;
import com.naver.maps.map.MapFragment;
import com.naver.maps.map.NaverMap;
import com.naver.maps.map.OnMapReadyCallback;
import com.naver.maps.map.util.FusedLocationSource;


public class MainActivity extends FragmentActivity implements OnMapReadyCallback {
    private static final int LOCATION_PERMISSION_REQUEST_CODE = 1000;
    private static final String[] PERMISSIONS = {
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
    };
    private FusedLocationSource locationSource;
    private FragmentManager fm;
    private NaverMap naverMap;

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

        fm = getSupportFragmentManager();
        MapFragment mapFragment = (MapFragment)fm.findFragmentById(R.id.map);
        if (mapFragment == null) {
            mapFragment = MapFragment.newInstance();
            fm.beginTransaction().add(R.id.map, mapFragment).commit();
        }
        mapFragment.getMapAsync(this);
        locationSource = new FusedLocationSource(this, LOCATION_PERMISSION_REQUEST_CODE);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

        // request code와 권한획득 여부 확인
        if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                naverMap.setLocationTrackingMode(LocationTrackingMode.Follow);
            }
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    @Override
    public void onMapReady(@NonNull NaverMap naverMap) {
        this.naverMap = naverMap;
        naverMap.setLocationSource(locationSource);

        // 권한확인. 결과는 onRequestPermissionsResult 콜백 매서드 호출
        ActivityCompat.requestPermissions(this, PERMISSIONS, LOCATION_PERMISSION_REQUEST_CODE);
    }

}

 

레이아웃

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:gravity="center">
    <fragment android:layout_width="match_parent"
        android:layout_height="500dp"
        android:id="@+id/map"
        android:name="com.naver.maps.map.MapFragment" />
  </LinearLayout>

 

 

 

 

  • Ref

https://developer.android.com/training/location

https://guide.ncloud-docs.com/docs/naveropenapiv3-maps-android-sdk-v3-start

https://navermaps.github.io/android-map-sdk/reference/com/naver/maps/map/util/FusedLocationSource.html

'Application Programming > Android' 카테고리의 다른 글

[Android/Java] BlankFragment  (0) 2021.06.28
[Android/Kotlin] Live Data  (0) 2021.06.28
[Android/Firebase] Firebase 연동  (0) 2021.06.16
[Android/Java] 지나가는 비행기  (0) 2021.06.14
[Android/Java] 터치하면 위로올라가는 게임  (0) 2021.06.14
    'Application Programming/Android' 카테고리의 다른 글
    • [Android/Java] BlankFragment
    • [Android/Kotlin] Live Data
    • [Android/Firebase] Firebase 연동
    • [Android/Java] 지나가는 비행기
    1000sj
    1000sj

    티스토리툴바