삼성헬스 앱 연동 심박수 데이터 가져오기
•
출시되는 상품은 삼성에 요청하고 심사받아서 SDK를 바로 사용할 수는 있음
•
구글에서 만든 Health connect라는 중계 앱을 이용하여 관련 api를 사용해야함.
삼성헬스 결론 : 연동은 성공해도 데이터가 google Health connect로 Write가 잘안되는 현상
수정 방향 google fit사용
아래의 코드는 주요 반영사항입니다. 추가적으로 수정이 필요할 수 있습니다.
•
MainActivity 코틀린 파일 수정
•
경로
android/app/src/main/kotlin/com/example/프로젝트이름/MainActivity.kt
JavaScript
복사
•
내용
package com.example.프로젝트이름
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity: FlutterFragmentActivity() {
}
JavaScript
복사
•
xxx_permissions.xml 파일 생성 및 수정
•
경로
android/app/src/main/res/xml/health_permissions.xml
JavaScript
복사
•
내용
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<permission name="android.permission.health.READ_HEART_RATE">
<dataType name="heart_rate">
<access type="read" />
</dataType>
</permission>
<permission name="android.permission.health.READ_STEPS">
<dataType name="steps">
<access type="read" />
</dataType>
</permission>
<permission name="android.permission.health.READ_SLEEP">
<dataType name="sleep">
<access type="read" />
</dataType>
</permission>
<permission name="android.permission.health.READ_HEALTH_DATA_HISTORY">
<dataType name="heart_rate">
<access type="read" />
</dataType>
<dataType name="steps">
<access type="read" />
</dataType>
<dataType name="sleep">
<access type="read" />
</dataType>
</permission>
</permissions>
JavaScript
복사
•
권한설정
•
경로
android/app/src/main/AndroidManifest.xml
JavaScript
복사
•
내용
<!-- 활동 인식 및 센서 권한 -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.BODY_SENSORS" />
<uses-permission android:name="android.permission.BODY_SENSORS_BACKGROUND" />
<!-- Health Connect 권한 -->
<uses-permission android:name="android.permission.health.READ_HEART_RATE"/>
<uses-permission android:name="android.permission.health.READ_STEPS"/>
<uses-permission android:name="android.permission.health.READ_SLEEP"/>
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_HISTORY"/>
<!-- health 패키지에서 필요로 하는 기존 권한 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
JavaScript
복사
•
동일파일
<application
android:label="프로젝트이름"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:taskAffinity=""
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<!-- Health Connect 관련 메타데이터 -->
<meta-data
android:name="health_permissions"
android:resource="@xml/health_permissions" />
</application>
JavaScript
복사
•
동일파일
<queries>
<intent>
<action android:name="android.intent.action.PROCESS_TEXT"/>
<data android:mimeType="text/plain"/>
</intent>
<!-- Health Connect 관련 쿼리 -->
<package android:name="com.google.android.apps.healthdata" />
<intent>
<action android:name="androidx.health.ACTION_SHOW_PERMISSIONS_RATIONALE" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" android:host="play.google.com" android:path="/store/apps/details" />
</intent>
</queries>
JavaScript
복사
•
gradle-wrapper.properties
•
경로
android/gradle/wrapper/gradle-wrapper.properties
JavaScript
복사
•
내용
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
JavaScript
복사
•
settings.gradle
•
경로
android/settings.gradle
JavaScript
복사
•
내용
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.6.0" apply false
id "org.jetbrains.kotlin.android" version "2.1.20" apply false
}
JavaScript
복사
빌드 진행시 gradle 버전에 계속 변경되지 않으면 id "com.android.application" version "8.6.0" apply false 이부분 필수 확인
•
android.build.gradle
•
경로
android/build.gradle
JavaScript
복사
•
내용
buildscript {
ext.kotlin_version = '1.9.20'
// repositories 정의 추가
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.google.gms:google-services:4.4.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
JavaScript
복사
•
android/app/build.gradle
•
경로
android/app/build.gradle
JavaScript
복사
•
내용
plugins {
id "com.android.application"
id "kotlin-android"
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id "dev.flutter.flutter-gradle-plugin"
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId = "프로젝트 id"
// You can update the following values to match your application needs.
// For more information, see: https://flutter.dev/to/review-gradle-config.
// minSdk = flutter.minSdkVersion
minSdk = 26
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
dependencies {
implementation("androidx.health.connect:connect-client:1.1.0-beta01")
}
JavaScript
복사
•
pubspec.yaml
health: ^12.1.0
url_launcher: ^6.3.1
package_info_plus: ^8.3.0
external_app_launcher: ^4.0.3
JavaScript
복사
사용전 최신 버전 및 호환 확인
메모
•
gradle 버전 변경
./gradlew wrapper --gradle-version 8.9
JavaScript
복사
•
전체 클린
cd /path/to/your/project/android
./gradlew clean
flutter clean
flutter pub get
JavaScript
복사
gradlew clean은 최후에 수단이다. 잘되면 좋지만 몇번 진행해본 결과 관련된 캐시파일들이 깨져서 더이상 빌드가 되지 않는다 git 을 이용하여 버전관리를 잘하는게 좋다