Android 조깅 앱 - 2부

소개



안녕하세요. 제 조깅 애플리케이션 사이드 프로젝트 2부에 오신 것을 환영합니다. :)

이번에는 ACTIVITY_RECOGNITION 권한을 얻는 것부터 시작하여 지난번에 만든 버튼을 처리하기로 했습니다.


새 문자열 추가



다음은 이 부분에 대해 추가한 문자열, 추적 중지 경고 대화 상자 및 인식 권한에 대한 텍스트입니다.

<!-- Alerts -->
<string name="alert_dialog_positive_text">OK</string>
<string name="alert_dialog_negative_text">Cancel</string>
<string name="stop_alert_dialog_text">Are you sure you want to stop tracking?</string>

<!-- Permissions -->
<string name="activity_recognition_permission_string">Please grant access for activity recogintion, this is need for showing your step counts etc.</string>



지도 가져오기 및 버튼 다루기



다음으로 레이아웃에서 구성 요소를 가져온 다음 각 버튼의 클릭 리스너를 설정해야 했습니다.

onCreate에서:

val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)

mStartButton = findViewById<Button>(R.id.startButton)
mStopButton = findViewById<Button>(R.id.stopButton)

mStartButton.setOnClickListener {
  handleStartButtonClicked()
}

mStopButton.setOnClickListener {
  handleStopButtonClicked()
}

updateButtonStatus()

if (isTracking) {
  startTracking()
}


다음으로 각 버튼을 클릭할 때 호출될 메서드를 만들어야 했습니다.

private fun handleStartButtonClicked() {
  mMap.clear()

  isTracking = true
  updateButtonStatus()

  startTracking()
}

private fun handleStopButtonClicked() {
  AlertDialog.Builder(this)
    .setTitle(R.string.stop_alert_dialog_text)
    .setPositiveButton(R.string.alert_dialog_positive_text) {_, _ ->
      isTracking = false
      updateButtonStatus()
      stopTracking()
    }.setNegativeButton(R.string.alert_dialog_negative_text) {_, _ ->

    }
    .create()
    .show()
}


시작 버튼은 기본적으로 추적 변수를 true로 설정하고 버튼을 업데이트하며 startTracking을 호출합니다.

중지 버튼은 사용자에게 추적을 정말로 중지할 것인지 묻는 경고 대화 상자를 표시합니다. (확실해야 함).

다음은 UI 버튼을 업데이트하는 방법입니다.

private fun updateButtonStatus() {
  mStartButton.isEnabled = !isTracking
  mStopButton.isEnabled = isTracking
}


매우 간단합니다. 추적 변수를 기반으로 두 버튼 각각의 활성화 상태를 설정하기만 하면 됩니다.

마지막으로 onMapReady 콜백을 통해 수행한 Google 지도 변수를 설정해야 했습니다.

mMap = googleMap



EasyPermissions 라이브러리 구현



저는 이전에 Android 앱에서 일했고 권한을 받고 처리하는 것이 고통스러웠습니다.

그래서 이번에는 EasyPermission 라이브러리를 사용하기로 결정했습니다.

[https://github.com/VMadalin/easypermissions-ktx ]

모듈 build.gradle 파일에 다음을 추가했습니다.

implementation 'com.vmadalin:easypermissions-ktx:1.0.0'



ACTIVITY_RECOGNITION 권한 요청



먼저 AndroidManifest.xml 파일에 uses-permission 문을 추가해야 했습니다.

<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>


이를 통해 startTracking 메서드를 구현할 수 있었습니다.

private fun startTracking() {
  / ACTIVITY_RECOGNITION is only needed for version Q+
  val isActivityRecognitionPermissionNeeded = Build.VERSION.SDK_INT < Build.VERSION_CODES.Q
  val isActivityRecognitionPermissionGranted = EasyPermissions.hasPermissions(this, ACTIVITY_RECOGNITION)

  if (isActivityRecognitionPermissionNeeded || isActivityRecognitionPermissionGranted) {
    // Permission Granted
} else {
    // Permission needed
    EasyPermissions.requestPermissions(
      host = this,
      rationale = getString(R.string.activity_recognition_permission_string),
      requestCode = REQUEST_CODE_ACTIVITY_RECOGNITION,
      perms = arrayOf(ACTIVITY_RECOGNITION)
)
}



휴, 그걸로 에뮬레이터에서 실행하고 확인할 수 있었습니다.



대박! 😎


결론



아직 초기지만 Kotlin을 즐겨 사용하고 있습니다.
다음으로 나는 WebRTC 시리즈를 계속하고 싶기 때문에 이것에서 약간의 휴식을 취할 것이라고 생각합니다. (기다려서 죄송합니다. 😖)


나처럼 일? 모든 지원에 감사드립니다. :)

좋은 웹페이지 즐겨찾기