마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

wear os 에서 fit 구현하기 관련 ...

0 추천

private val fitnessOptions = FitnessOptions.builder()

    .addDataType(DataType.TYPE_HEART_RATE_BPM, FitnessOptions.ACCESS_READ)

    .build()

 

private val googleSignInLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->

    Log.d("debug1", "Result code: ${result.resultCode}")

    Log.d("debug1", "Data: ${result.data}")

 

    when (result.resultCode) {

        RESULT_OK -> {

            try {

                val task = GoogleSignIn.getSignedInAccountFromIntent(result.data)

                val account = task.getResult(ApiException::class.java)

                Log.d("debug1", "Google Sign-In successful. Email: ${account.email}")

                accessGoogleFit()

            } catch (e: ApiException) {

                Log.e("debug1", "Google Sign-In failed. Status code: ${e.statusCode}", e)

                // Show error to user

                //Toast.makeText(this, "Google Sign-In failed: ${e.message}", Toast.LENGTH_LONG).show()

            }

        }

        RESULT_CANCELED -> {

            Log.e("debug1", "Google Sign-In was canceled by user")

            //Toast.makeText(this, "Sign-in canceled", Toast.LENGTH_SHORT).show()

        }

        else -> {

            Log.e("debug1", "Google Sign-In failed with result code: ${result.resultCode}")

            //Toast.makeText(this, "Sign-in failed", Toast.LENGTH_SHORT).show()

        }

    }

}

 

 

 

private val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->

    if (isGranted) {

        accessGoogleFit()

    } else {

        Log.e("debug1", "Body sensors permission denied")

    }

}

 

private fun checkPermissionsAndAccessGoogleFit() {

    Log.d("debug1", "Checking BODY_SENSORS permission")

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.BODY_SENSORS) == PackageManager.PERMISSION_GRANTED) {

        Log.d("debug1", "Permission granted")

        accessGoogleFit()

    } else {

        Log.d("debug1", "Permission not granted")

        requestPermissionLauncher.launch(Manifest.permission.BODY_SENSORS)

    }

}

 

private fun accessGoogleFit() {

    Log.d("debug1", "accessGoogleFit")

 

    val account = GoogleSignIn.getAccountForExtension(this, fitnessOptions)

    if (!GoogleSignIn.hasPermissions(account, fitnessOptions)) {

        Log.d("debug1", "Requesting Google Sign-In")

 

        val googleSignInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)

            .requestEmail()  // 이메일 권한 추가

            .requestScopes(Scope("https://www.googleapis.com/auth/fitness.activity.read"))

            .requestScopes(Scope("https://www.googleapis.com/auth/fitness.body.read"))

            .requestScopes(Scope("https://www.googleapis.com/auth/fitness.heart_rate.read"))

            .build()

 

        try {

            val googleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions)

            googleSignInLauncher.launch(googleSignInClient.signInIntent)

        } catch (e: Exception) {

            Log.e("debug1", "Error launching sign-in", e)

            //Toast.makeText(this, "Error launching sign-in: ${e.message}", Toast.LENGTH_LONG).show()

        }

    } else {

        Log.d("debug1", "Google Sign-In permissions already granted")

        subscribeToHeartRateData()

    }

}

 

 

private fun subscribeToHeartRateData() {

    Fitness.getRecordingClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions))

        .subscribe(DataType.TYPE_HEART_RATE_BPM)

        .addOnSuccessListener {

            Log.i("debug1", "Successfully subscribed to heart rate data")

            readHeartRateData()

        }

        .addOnFailureListener { e ->

            Log.e("debug1", "Failed to subscribe to heart rate data", e)

        }

}

 

….. readHeartRateData ….

 

override fun onCreate(savedInstanceState: Bundle?) {

    installSplashScreen()

….

    checkPermissionsAndAccessGoogleFit()

}

 

 

 

Checking BODY_SENSORS permission

Permission granted

accessGoogleFit

Requesting Google Sign-In

 

——> 여기서 워치에서 메일계정 로그인

 

Result code: 0

Data: Intent { (has extras) }

Google Sign-In was canceled by user

 

 

이렇게 실패가 떨어집니다.

 

오늘

Google Fit API가 활성화 했고요 .

월래 앱에서는 구글로그인을 사용하고 있었습니다.

app / wear os app - 의 패키징을 동일하게 처리했습니다.

 

 

혹시 제가 빠트린 부분이 있을까요?

조언 구합니다.

창현아빠 (220 포인트) 님이 2024년 10월 25일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...