GoogleMap에 Jetpack Compose 포함
이런 느낌이 들어서 해봤어요.
지도의 삽입 자체는 이곳의 문장에 유지된다
정말 몇 줄만 쓰고 완성했어요. 아주 간단해서 놀랐어요.
그렇지만
Compose와 전혀 상관없이 자신이 현재 소재지를 취득하는 등 처리
너무 난해하니까 총결산해 보자(아직 잘 모르겠다)
현재 위치 가져오기 처리
권한 설정
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
선언에 이것을 추가한다.COARSE 는 로우 레벨, FINE 는 로우 레벨 검색 가능
권한 상태 확인
흔히 볼 수 있는 "프로그램이 hogehoge를 요구합니다. 허용합니까?"
이런 대화.
ContextCompat.checkSelfPermission()
이렇게 하면 허가 여부를 확인할 수 있다.
대화 상자 여기 있습니다.
ActivityCompat.requestPermissions()
를 참고하십시오.
다 귀납하면 이런 느낌이에요.
private val REQUEST_CODE_LOCATION = 100
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
//現在地取得処理を書く
}
else {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_CODE_LOCATION)
}
context,array Of (필요 권한), 고유의 요청 코드를 설정해서 보냅니다.
그때 판정도 쓸 수 있을 것 같아.
현재 소재지에서 처리를 얻다
fusedLocationClient = FusedLocationProviderClient(requireActivity())
// どのような取得方法を要求
val locationRequest = LocationRequest.create().apply {
interval = 10000 // 最遅の更新間隔(但し正確ではない。)
fastestInterval = 5000 // 最短の更新間隔
priority = LocationRequest.PRIORITY_HIGH_ACCURACY // 精度重視
}
// コールバック
val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
//locationResultに結果が入っているので後はよしなにする
//removeLocationUpdatesをしないと永遠と位置情報を取得し続けるので消してあげる
fusedLocationClient.removeLocationUpdates(this)
}
}
// 取得処理
fusedLocationClient.requestLocationUpdates(
locationRequest,
locationCallback,
Looper.myLooper()!!
)
허가 없이 처리하다
private fun locationStart(
getLocation: () -> Unit
) {
// Instances of LocationManager class must be obtained using Context.getSystemService(Class)
val locationManager =
requireActivity().getSystemService(LOCATION_SERVICE) as LocationManager
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Timber.d("debug", "location manager Enabled")
} else {
// to prompt setting up GPS
val settingsIntent = Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)
startActivity(settingsIntent)
Timber.d("debug", "not gpsEnable, startActivity")
}
if (ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
requireActivity(),
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_CODE_LOCATION
)
Timber.d("debug", "checkSelfPermission false")
showDialogToGetPermission()
return
}
getLocation()
}
private fun showDialogToGetPermission() {
val builder = AlertDialog.Builder(requireContext())
builder.setTitle("現在地取得が利用できません")
.setMessage("現在地取得を利用するには権限を許可してください")
builder.setPositiveButton("OK") { _, _ ->
val intent = Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", "hogehoge", null)
)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent) // 6
}
builder.setNegativeButton("CANCEL") { _, _ ->
// ignore
}
val dialog = builder.create()
dialog.show()
}
참고 문장
Reference
이 문제에 관하여(GoogleMap에 Jetpack Compose 포함), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/apple_nktn/articles/7b74eaee4cd7d8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)