나의 앱에서 카카오맵 열기
_ 현재 사용자의 위치에서 내가 설정해 둔 위치까지 길 찾는 앱 페이지로 만들기
1. 카카오맵에서 준비한 api 사용 설명서 읽기
( https://apis.map.kakao.com/android_v2/docs/api-guide/urlscheme/#%EA%B8%B8%EC%B0%BE%EA%B8%B0 )
- 길 찾기 URL Scheme을 사용해서 앱에서 카카오맵을 열기로 했다.
2. 안드로이드 스튜디오
- app/manifests/AndroidManifest.xml 파일에 위치 정보 가져오는 코드 추가
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- 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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
- MainActivity.java 코드 작성
public class MainActivity extends AppCompatActivity {
Button button;
// 로케이션 매니저, 리스너 사용
LocationManager locationManager;
LocationListener locationListener;
// 사용자 위치 멤버변수로 받기
Double currentLat;
Double currentLng;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
// 위치 관리자 객체 가져오기
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
// 위치 권한 확인 및 요청
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
100);
} else {
// 위치 정보 요청
requestLocationUpdates();
}
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 위치 정보가 없으면 메시지 출력
if (currentLat == null || currentLng == null) {
Toast.makeText(MainActivity.this, "현재 위치를 가져오는 중입니다. 잠시 후 다시 시도해주세요.", Toast.LENGTH_SHORT).show();
return;
}
try {
// 내가 설정한 도착지 좌표, 매장 위치 위도는 37.54130563627117, 경도는 126.67636881196708
Double endLat = 37.54130563627117;
Double endLng = 126.67636881196708;
// URL Scheme
String url = "kakaomap://route?sp=" + currentLat + "," + currentLng + "&ep=" + endLat + "," + endLng + "&by=PUBLICTRANSIT";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} catch (ActivityNotFoundException e) {
// 카카오 맵이 설치되어 있지 않은 경우 처리
Toast.makeText(MainActivity.this, "카카오 맵이 설치되어 있지 않습니다.", Toast.LENGTH_LONG).show();
}
}
});
}
// 위치 정보 요청 메서드
private void requestLocationUpdates() {
locationListener = new LocationListener() {
@Override
public void onLocationChanged(@NonNull Location location) {
// 위치가 변경될 때 호출됨
currentLat = location.getLatitude();
currentLng = location.getLongitude();
Log.i("GPS MAIN", "위도 : " + currentLat + ", 경도 : " + currentLng);
}
};
// 위치 업데이트 요청 (최소 시간 간격: 5초, 최소 거리: 0미터)
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// 허용하시겠습니까? 물어보는 것
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
100);
return;
}
locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER, 5000, 0, locationListener);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 100) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 권한이 승인됨
// 위치 정보 요청 다시 시작
requestLocationUpdates();
} else {
// 사용자가 권한을 거부함
Toast.makeText(this, "위치 권한이 필요합니다.", Toast.LENGTH_SHORT).show();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// 액티비티가 종료될 때 위치 업데이트 중지
if (locationManager != null && locationListener != null) {
locationManager.removeUpdates(locationListener);
}
}
}
3. 앱 실행
- 버튼을 누르면 카카오 맵 앱이 실행되고, 내가 지정한 위치로 잘 가져오는 것을 확인할 수 있다.
'Android Studio' 카테고리의 다른 글
[Android Studio] 스마트폰 연결하기 (개발자 모드) _ 삼성 (0) | 2024.07.15 |
---|---|
[Android Studio] 액션바 배경색, 글씨색 변경하기 / 액션바 title 위치 설정하기 _ 뒤로가기 버튼 (0) | 2024.07.12 |
[Android Studio] 텐서플로우를 이용해서 이미지 분류 앱 만들기 (0) | 2024.07.12 |
[Android Studio] 구글맵을 활용하여 지도로 할 수 있는 작업 _ LatLng, Marker (0) | 2024.06.19 |
[Android Studio] 구글맵 지도를 사용해서 지도 표시하는 방법 _ 설정 방법, 화면 개발 (0) | 2024.06.18 |