Slide 1

Slide 1 text

2022೥ ϔϧεέΞΞϓϦͷ ͭ͘Γํ Kohei Yamamoto 1

Slide 2

Slide 2 text

ࣗݾ঺հ Kohei Yamamoto farundorl gyamoto Android application engineer Mobility Technologies (2021.08 - , Main job) Upmind (2022.01 - , Side job) 2 Name : Twitter : GitHub : Job :

Slide 3

Slide 3 text

Mobility
 Technologies λΫγʔΞϓϦʮ(0ʯΛ͸͡Ίͱ ͨ͠ҠಈʹؔΘΔαʔϏεΛ։ൃ Ұॹʹಇ͘ϝϯόʔืूதʂʂ %SPJE,BJHJεϙϯαʔϒʔεలࣔ΍ "OESPJEษڧձ΍͍ͬͯ·͢ 3

Slide 4

Slide 4 text

Upmind ࣗ཯ਆܦΛܭଌͯ͠৺ͱମΛ੔͑Δ ϚΠϯυϑϧωεΞϓϦ 
 ։ൃͰಘΒΕͨ஌ݟΛ΋ͱʹɺ 
 ϔϧεέΞΞϓϦͷͭ͘ΓํΛ঺հ 4

Slide 5

Slide 5 text

͜ͷηογϣϯͰ࿩͢͜ͱ ϔϧεέΞΞϓϦ͕ѻ͏σʔλͱϓϥοτϑΥʔϜʹ͍ͭͯ ϓϥοτϑΥʔϜಋೖΛߟ͑Δ HealthConnectͷಋೖ ·ͱΊ 01 02 03 04 5 2022೥ ϔϧεέΞΞϓϦͷͭ͘Γํ

Slide 6

Slide 6 text

͜ͷηογϣϯͰ࿩͢͜ͱ 6 2022೥ ϔϧεέΞΞϓϦͷͭ͘Γํ 01 02 03 04 ϔϧεέΞΞϓϦ͕ѻ͏σʔλͱϓϥοτϑΥʔϜʹ͍ͭͯ ϓϥοτϑΥʔϜಋೖΛߟ͑Δ HealthConnectͷಋೖ ·ͱΊ

Slide 7

Slide 7 text

ϔϧεέΞΞϓϦ࢖ͬͯΔʁ GooglePlayͷʮ݈߁ˍϑΟοτωεʯΧςΰϦʹ৺਎ͷ݈߁؅ཧΛ໨తͱͨ͠
 ༷ʑͳϔϧεέΞΞϓϦ͕ެ։͞Ε͍ͯΔɻ ϔϧεέΞΞϓϦͷྫ • ೔ʑͷ׆ಈʢา਺ɺ৺ഥɺਭ຾ɺମॏʣΛৼΓฦΔ • ӡಈʢےτϨɺϥϯχϯάʣ΍৯ੜ׆ͷه࿥ • ϚΠϯυϑϧωεͷৄ͍͠ํ๏Λઆ໌ 7

Slide 8

Slide 8 text

ϔϧεέΞΞϓϦ͕ѻ͏σʔλ ϔϧεέΞΞϓϦͰ͸Ϣʔβͷ݈߁ʹؔ͢Δ༷ʑͳσʔλ͕ѻΘΕ͍ͯΔɻ ϔϧεέΞΞϓϦ͕ѻ͏σʔλͷྫ • Ϣʔβࢦඪ → ਎௕ɺମॏɺ৺ഥ਺ɺମԹɺମࢷ๱཰ɺݺٵ਺ɺͳͲ • ਭ຾ → ਭ຾࣌ؒɺ࣌ؒ͋ͨΓͷਭ຾ͷਂ͞ • ϥϯχϯά → ӡಈ࣌ؒɺ࣌ؒ͋ͨΓͷ଎౓ • ΤΫααΠζ → ࣮ࢪͨ͠ӡಈɺӡಈ࣌ؒɺ࣌ؒ͋ͨΓͷ৺ഥ਺ 8

Slide 9

Slide 9 text

ϔϧεέΞΞϓϦͱϓϥοτϑΥʔϜ ϔϧεέΞΞϓϦຖʹѻΘΕ͍ͯΔσʔλΛڞ༗͢Δ࢓૊Έͱͯ͠ɺϔϧεέΞ ϓϥοτϑΥʔϜ͕։ൃɺఏڙ͞Ε͍ͯΔɻ ϓϥοτϑΥʔϜʹ࿈ܞ͢Δ͜ͱͰɺෳ਺ͷΞϓϦ͕ͦΕͧΕ࣋ͭσʔλΛूܭ ͯ͠׆ಈه࿥ͱͯ͠ৼΓฦΔ͜ͱ͕Ͱ͖ɺ׆ಈه࿥Λ΋ͱʹద੾ͳίϯςϯπΛ קΊΔ౳ͷσʔλ׆༻͕Ͱ͖Δɻ 9

Slide 10

Slide 10 text

ϔϧεέΞΞϓϦͷϓϥοτϑΥʔϜଟ͗͢໰୊ 2022೥ݱࡏɺଟ͘ͷϔϧεέΞΞϓϦͷϓϥοτϑΥʔϜ͕ఏڙ͞Ε͍ͯΔɻ
 ΞϓϦʹΑͬͯ࿈ܞ͍ͯ͠ΔϓϥοτϑΥʔϜ͕ҟͳΔ৔߹͸ɺϢʔβͷσʔλ͕ ϓϥοτϑΥʔϜͷนͰ෼அͯ͠͠·͏ɻ ෼அͯ͠͠·ͬͨྫ • าߦɺ৺ഥ → SamsungHealth • ਭ຾࣌ؒ → Fitbit • ମॏ → OMRON connect → Google Fit 10

Slide 11

Slide 11 text

৽͍͠ϓϥοτϑΥʔϜ HealthConnect ϓϥοτϑΥʔϜଟ͗͢໰୊Λղܾ͢ΔͨΊʹɺGoogle I/O 2022 Ͱൃද͞Εͨ ৽͍͠ϓϥοτϑΥʔϜɻ ͦΕͧΕϓϥοτϑΥʔϜΛ࣋ͭGoogleͱSamsung͕։ൃɻ
 ࠓळʹGoogleFit, Fitbit, SamsungHealth͕HealthConnectʹରԠ༧ఆɻ ଞʹ΋MyFitnessPal, LeapFitness, Withingsͱଟ͘ͷϔϧεέΞαʔϏε͕։ൃʹ ڠྗ͍ͯ͠Δɻ 11

Slide 12

Slide 12 text

HealthConnectͷಛ௃ • AndroidσόΠεʹඥ͍ͮͨσόΠεத৺ͷσʔλ؅ཧ • σʔλछผ୯Ґͷࡉ͔͍ݖݶ੍ޚ • Android 9.0Ҏ͕߱ඞཁ • 2022೥10݄5೔࣌఺ͰΞϧϑΝ൛ʢ1.0.0-alpha06ʣ 12

Slide 13

Slide 13 text

GoogleFitͷಛ௃ • GoogleΞΧ΢ϯτʹඥ͍ͮͨαʔόத৺ͷσʔλ؅ཧ • OAuthʹΑΔݖݶ੍ޚ • Android 4.1Ҏ͕߱ඞཁ • Android޲͚API͸2022೥5݄͔Βඇਪ঑ɻ2024೥ʹαϙʔτऴྃ༧ఆ 13

Slide 14

Slide 14 text

σʔλ؅ཧ HealthConnect σόΠεத৺ͷσʔλ؅ཧ → σόΠε͔Βফ͑Δͱ෮׆ෆՄ 14 GoogleFit αʔόத৺ͷσʔλ؅ཧ → GoogleΞΧ΢ϯτ͋Ε͹෮׆ HealthConnectͱGoogleFitͷൺֱ

Slide 15

Slide 15 text

ݖݶ੍ޚ HealthConnect σʔλछผຖͷΞΫηεݖ ʢಡΈऔΓɺॻ͖ࠐΈʣͷݖݶ੍ޚ → ࣮૷͸ෳࡶ
 → Ϣʔβͱͯ͠خ͍͠ 15 GoogleFit ΞϓϦ୯ҐͷΞΫηεݖʢෳ਺σʔλ छผΛ·ͱΊͨʣͷOAuthݖݶ੍ޚ → ࣮૷͸γϯϓϧ
 → ΤϯδχΞͱͯ͠خ͍͠ HealthConnectͱGoogleFitͷൺֱ

Slide 16

Slide 16 text

OSόʔδϣϯ HealthConnect Android 9.0Ҏ߱ → 9.0Ҏ߱ͷϢʔβ͕େ෦෼Λ઎ΊΔ
 → 8.1ະຬͷϢʔβ΋࣮֬ʹ࢒ͬͯ
 ɹ͍ΔͷͰɺ೰·͍͠… 16 GoogleFit Android 4.1Ҏ߱ → 10೥લͷOSͰ΋ಈ͘ʂʂ HealthConnectͱGoogleFitͷൺֱ

Slide 17

Slide 17 text

҆ఆੑͱকདྷੑ HealthConnect ΞϧϑΝ൛
 طଘϓϥοτϑΥʔϜ͸ରԠ༧ఆ → ·ͩAPIʹഁյతมߋ͸͋Γͦ͏
 → GoogleFitҎ֎ͷϓϥοτϑΥʔϜ
 ɹͱ࿈ܞͰ͖Δʂʂ 17 GoogleFit 2022೥5݄͔Βඇਪ঑
 2024೥ʹαϙʔτऴྃ༧ఆ → ಈ࡞͸҆ఆ͍ͯ͠Δ
 → ৽͘͠ಋೖ͢Δͷ͸ආ͚͍ͨ HealthConnectͱGoogleFitͷൺֱ

Slide 18

Slide 18 text

HealthConnectͱGoogleFitͷൺֱ 18 HealthConnect GoogleFit ɹσʔλ؅ཧ ̋ σόΠεத৺ ˕ αʔόத৺ ɹݖݶ੍ޚ ˕ σʔλͱΞΫηεݖ୯Ґ ˚ ΞϓϦ୯Ґ ɹOSόʔδϣϯ ˚ Android 9.0~ ̋ Android 4.1~ ɹ҆ఆੑ ˚ ·ͩΞϧϑΝ൛ ̋ ҆ఆ൛ ɹকདྷੑ ˕ طଘϓϥοτϑΥʔϜ͕ରԠ༧ఆ ˚ Android޲͚API͸ඇਪ঑

Slide 19

Slide 19 text

͜ͷηογϣϯͰ࿩͢͜ͱ 19 2022೥ ϔϧεέΞΞϓϦͷͭ͘Γํ 01 02 03 04 ϔϧεέΞΞϓϦ͕ѻ͏σʔλͱϓϥοτϑΥʔϜʹ͍ͭͯ ϓϥοτϑΥʔϜಋೖΛߟ͑Δ HealthConnectͷಋೖ ·ͱΊ

Slide 20

Slide 20 text

എܠ ઌߦͯ͠iOS൛͕ެ։͞Ε͍ͯΔ
 ϚΠϯυϑϧωεΞϓϦUpmindͷ Android൛Λ࣮૷͢Δɻ 20 ϓϥοτϑΥʔϜಋೖ Λߟ͑Δ

Slide 21

Slide 21 text

ػೳ ɾσόΠεͷΧϝϥͰࣗ཯ਆܦΛܭଌ ɾϚΠϯυϑϧωεΛվળ͢ΔͨΊͷ
 ɹίϯςϯπΛఏڙ͢Δ 21 ϓϥοτϑΥʔϜಋೖ Λߟ͑Δ

Slide 22

Slide 22 text

UpmindͷϓϥοτϑΥʔϜಋೖํ਑ HealthConnectΛಋೖ͢Δ ɾGoogleFit͸Android޲͚API͕ඇਪ঑ͷͨΊɺ৽نΞϓϦ΁ͷಋೖ͸ආ͚͍ͨ ɾAndroidόʔδϣϯ΋΄΅ຬͨ͢͜ͱ͕Ͱ͖ΔʢAndroid 8.0~8.1ͷΈະରԠʣ ϔϧεέΞϓϥοτϑΥʔϜͱͷ࿈ܞ͸iOS࣮૷Λࢀߟʹ͢Δ ɾiOS൛͸AppleͷϔϧεέΞϓϥοτϑΥʔϜ HealthKit ͱ࿈ܞ͍ͯ͠Δ ɾ΄΅ಉ͡σʔλछผ͕HealthConnectʹ༻ҙ͞Ε͍ͯΔ 22

Slide 23

Slide 23 text

23 σόΠεͷΧϝϥͰࣗ཯ਆܦείΞ ʢ৺ഥͷΏΒ͗ɺ৺ഥ਺ʣΛܭଌ → ܭଌͨ͠৺ഥ਺ͷॻ͖ࠐΈ HealthConnectʹ
 ࿈ܞ͢Δσʔλ

Slide 24

Slide 24 text

24 վળίϯςϯπఏҊ༻ͷࢦඪΛऔಘ
 → า਺ɺਭ຾ɺফඅΧϩϦʔͷಡΈऔΓ Ϣʔβ͕࣮ࢪͨ͠վળίϯςϯπ
 ʢᛉ૝ɺϤΨɺετϨονʣΛه࿥͢Δ
 → ΞΫςΟϏςΟͷॻ͖ࠐΈ
 HealthConnectʹ
 ࿈ܞ͢Δσʔλ

Slide 25

Slide 25 text

UpmindͰѻ͏σʔλͷϑϩʔΛߟ͑Δ σʔλͷ׆༻
 
 վળίϯςϯπʢᛉ૝ɺ ϤΨɺετϨονʣ 25 σʔλͷอଘ
 
 ΞϓϦαʔόʹࣗ཯ਆ ܦείΞΛอଘ ϓϥοτϑΥʔϜ࿈ܞ
 
 า਺ɺਭ຾ɺফඅΧϩ ϦʔΛऔಘ σʔλͷೖྗ
 
 ࣗ཯ਆܦείΞʢ৺ഥͷ ΏΒ͗ɺ৺ഥ਺ʣΛܭଌ ϓϥοτϑΥʔϜ࿈ܞ
 
 ৺ഥ਺ͷॻ͖ࠐΈ

Slide 26

Slide 26 text

UpmindͰѻ͏σʔλͷϑϩʔΛߟ͑Δ σʔλͷ׆༻
 
 վળίϯςϯπʢᛉ૝ɺ ϤΨɺετϨονʣ 26 Ϣʔβମݧ
 
 վળίϯςϯπΛࢹ ௌɺମݧ ϓϥοτϑΥʔϜ࿈ܞ
 
 վળίϯςϯπͷ࣮ࢪ Λॻ͖ࠐΈ σʔλͷอଘ
 
 ΞϓϦαʔόʹվળίϯ ςϯπͷࢹௌ׬ྃΛอଘ

Slide 27

Slide 27 text

͜ͷηογϣϯͰ࿩͢͜ͱ 27 2022೥ ϔϧεέΞΞϓϦͷͭ͘Γํ 01 02 03 04 ϔϧεέΞΞϓϦ͕ѻ͏σʔλͱϓϥοτϑΥʔϜʹ͍ͭͯ ϓϥοτϑΥʔϜಋೖΛߟ͑Δ HealthConnectͷಋೖ ·ͱΊ

Slide 28

Slide 28 text

HealthConnectͷಋೖ AndroidStudio : HealthConnect : UI impl : Async impl : Gradle script : 28 Dolphin | 2021.3.1 1.0.0-alpha05 Jetpack Compose 1.2.1 Kotlin Coroutines 1.6.0 Groovy AndroidΞϓϦ͔ΒHealthConnectͷݖݶऔಘͱσʔλͷಡΈॻ͖Λ࣮૷͢Δɻ ಈ࡞؀ڥͱόʔδϣϯ

Slide 29

Slide 29 text

HealthConnectͷಋೖखॱ I. ϥΠϒϥϦಋೖͱϓϩδΣΫτઃఆ II. σʔλछผΛܾΊΔ III.ར༻Մ൱൑ఆ IV.ݖݶͷऔಘ V. σʔλͷಡΈࠐΈ VI.σʔλͷॻ͖ࠐΈ 29

Slide 30

Slide 30 text

I. HealthConnectͷϥΠϒϥϦಋೖͱϓϩδΣΫτઃఆ 1. app/build.gradle ʹHealthConnectϥΠϒϥϦͷґଘؔ܎Λ௥Ճ͢Δ 30 dependencies { implementation 'androidx.health.connect:connect-client:1.0.0-alpha05' }

Slide 31

Slide 31 text

I. HealthConnectͷϥΠϒϥϦಋೖͱϓϩδΣΫτઃఆ 2. AndroidManifest.xml ʹHealthConnectͷݖݶ࢖༻ํ๏Λઆ໌͢ΔActivityΛ௥Ճ ͢Δ 31

Slide 32

Slide 32 text

I. HealthConnectͷϥΠϒϥϦಋೖͱϓϩδΣΫτઃఆ 3. AndroidManifest.xml ʹHealthConnectΞϓϦͱͷ࿈ܞઃఆΛ௥Ճ͢Δ 32

Slide 33

Slide 33 text

II. HealthConnectͷσʔλछผΛܾΊΔ 1. iOSͷHealthKitͱಉ༷ͷσʔλछผΛHealthConnectͰݕ౼͢Δ 33 let writeTypes = Set([ HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)!, HKObjectType.categoryType(forIdentifier: HKCategoryTypeIdentifier.mindfulSession)! ]) let readTypes = Set([ HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!, HKObjectType.categoryType(forIdentifier: HKCategoryTypeIdentifier.sleepAnalysis)!, HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.activeEnergyBurned)! ])

Slide 34

Slide 34 text

II. HealthConnectͷσʔλछผΛܾΊΔ 2. HealthConnectͷσʔλछผʢRecordΠϯλʔϑΣʔεʣʹఆٛ͞Εͨ
 ৺ഥɺϚΠϯυϑϧωεɺา਺ɺਭ຾ɺΤωϧΪʔফඅྔͷΫϥεΛ୳͢… 34 ActiveCaloriesBurnedRecord, BasalBodyTemperatureRecord, BasalMetabolicRateRecord, BloodGlucoseRecord, BloodPressureRecord, BodyFatRecord, BodyTemperatureRecord, BoneMassRecord, CervicalMucusRecord, CyclingPedalingCadenceRecord, DistanceRecord, ElevationGainedRecord, ExerciseEventRecord, ExerciseLapRecord, ExerciseRepetitionsRecord, ExerciseSessionRecord, FloorsClimbedRecord, HeartRateRecord, HeightRecord, HipCircumferenceRecord, HydrationRecord, LeanBodyMassRecord, MenstruationFlowRecord, NutritionRecord, OvulationTestRecord, OxygenSaturationRecord, PowerRecord, RespiratoryRateRecord, RestingHeartRateRecord, SexualActivityRecord, SleepSessionRecord, SleepStageRecord, SpeedRecord, StepsCadenceRecord, StepsRecord, SwimmingStrokesRecord, TotalCaloriesBurnedRecord, Vo2MaxRecord, WaistCircumferenceRecord, WeightRecord, WheelchairPushesRecord

Slide 35

Slide 35 text

ActiveCaloriesBurnedRecord, BasalBodyTemperatureRecord, BasalMetabolicRateRecord, BloodGlucoseRecord, BloodPressureRecord, BodyFatRecord, BodyTemperatureRecord, BoneMassRecord, CervicalMucusRecord, CyclingPedalingCadenceRecord, DistanceRecord, ElevationGainedRecord, ExerciseEventRecord, ExerciseLapRecord, ExerciseRepetitionsRecord, ExerciseSessionRecord, FloorsClimbedRecord, HeartRateRecord, HeightRecord, HipCircumferenceRecord, HydrationRecord, LeanBodyMassRecord, MenstruationFlowRecord, NutritionRecord, OvulationTestRecord, OxygenSaturationRecord, PowerRecord, RespiratoryRateRecord, RestingHeartRateRecord, SexualActivityRecord, SleepSessionRecord, SleepStageRecord, SpeedRecord, StepsCadenceRecord, StepsRecord, SwimmingStrokesRecord, TotalCaloriesBurnedRecord, Vo2MaxRecord, WaistCircumferenceRecord, WeightRecord, WheelchairPushesRecord II. HealthConnectͷσʔλछผΛܾΊΔ 2. HealthConnectͷσʔλछผʢRecordΠϯλʔϑΣʔεʣʹఆٛ͞Εͨ
 ৺ഥɺϚΠϯυϑϧωεɺา਺ɺਭ຾ɺΤωϧΪʔফඅྔͷΫϥεΛ୳͢… 35 ActiveCaloriesBurnedRecord HeartRateRecord SleepSessionRecord SleepStageRecord StepsRecord TotalCaloriesBurnedRecord

Slide 36

Slide 36 text

II. HealthConnectͷσʔλछผΛܾΊΔ 36 3. UpmindΞϓϦͰѻ͏σʔλΛཧղͯ͠ɺHealthConnectͷσʔλछผΛ୳͢ ɾ৺ഥ → 1෼ؒͷ৺ഥ਺ ɾϚΠϯυϑϧωε → Ϣʔβ͕࣮ࢪͨ͠վળίϯςϯπʢᛉ૝ɺϤΨɺετϨονʣ ɾา਺ → 1೔ͷา਺ ɾਭ຾ → 1೔ͷਭ຾࣌ؒʢਭ຾ͷਂ͞͸আ͘ʣ ɾΤωϧΪʔফඅྔ → Ϣʔβ͕1೔׆ಈͯ͠ফඅͨ͠ΤωϧΪʔ

Slide 37

Slide 37 text

II. HealthConnectͷσʔλछผΛܾΊΔ 37 ɾ৺ഥ → HeartRateRecord ɾϚΠϯυϑϧωε → ExerciseSessionRecord
 ɹɹɹɹɹɹɹɹɹɹ( ExerciseType.MEDITATION / YOGA / STRETCHING ) ɾา਺ → StepsRecord ɾਭ຾ → SleepSessionRecord, SleepStageRecord ɾΤωϧΪʔফඅྔ → ActiveCaloriesBurnedRecord, TotalCaloriesBurnedRecord

Slide 38

Slide 38 text

II. HealthConnectͷσʔλछผΛܾΊΔ 38 Android / HealthConnect iOS / HealthKit ɹ৺ഥ਺ HeartRateRecord HKQuantityTypeIdentifier.
 heartRate ɹ࣮ࢪͨ͠ 
 ɹվળίϯςϯπ ExerciseSessionRecord HKCategoryTypeIdentifier.
 mindfulSession ɹา਺ StepsRecord HKQuantityTypeIdentifier.
 stepCount ɹਭ຾ SleepSessionRecord HKCategoryTypeIdentifier.
 sleepAnalysis ɹফඅΧϩϦʔ ActiveCaloriesBurnedRecord HKQuantityTypeIdentifier.
 activeEnergyBurned

Slide 39

Slide 39 text

II. HealthConnectͷσʔλछผΛܾΊΔ 4. ΞϓϦͰ࢖༻͢ΔݖݶΛ res/values/health_permissions.xml ʹఆٛ͢Δ 39 androidx.health.permission.HeartRate.WRITE androidx.health.permission.ActivitySession.WRITE androidx.health.permission.Steps.READ androidx.health.permission.SleepSession.READ androidx.health.permission.ActiveCaloriesBurned.READ

Slide 40

Slide 40 text

III. HealthConnectͷར༻Մ൱൑ఆ HealthConnectͷݖݶऔಘલʹɺHealthConnectΞϓϦͷར༻Մೳ൑ఆ͕ඞཁ • Androidόʔδϣϯ͕9.0Ҏ্͔
 → Android 9.0ະຬͷ৔߹͸ϔϧεέΞ࿈ܞͰ͖ͳ͍ͷͰɺ࿈ܞUIΛඇදࣔ • HealthConnectΞϓϦ͕ΠϯετʔϧࡁΈ͔
 → ະΠϯετʔϧͷ৔߹͸ɺGooglePlayͰΞϓϦμ΢ϯϩʔυΛҊ಺͢Δ
 ※ ະΠϯετʔϧͷ৔߹ʹ HealthConnectClient Λੜ੒͢ΔͱΫϥογϡ͢Δ 40

Slide 41

Slide 41 text

IV. HealthConnectͷݖݶऔಘ 2. ݖݶΛཁٻ͢ΔIntentͷLauncherΛੜ੒͢Δ 41 val permissionContract: ActivityResultContract< Set, Set > = PermissionController.createRequestPermissionResultContract() // JetpackComposeͷ `@Composable` ϝιου಺ val launcher = rememberLauncherForActivityResult(permissionContract) { // TODO: ݖݶͷཁٻ݁Ռ `Set` Λݕূ͢Δ }

Slide 42

Slide 42 text

IV. HealthConnectͷݖݶऔಘ 3. ݖݶΛཁٻ͢Δը໘ભҠΛ͓͜ͳ͏ 42 val PERMISSIONS = setOf( HealthPermission.createWritePermission(HeartRateRecord::class), HealthPermission.createWritePermission(ExerciseSessionRecord::class), HealthPermission.createReadPermission(StepsRecord::class), HealthPermission.createReadPermission(SleepSessionRecord::class), HealthPermission.createReadPermission(ActiveCaloriesBurnedRecord::class), ) launcher.launch(PERMISSIONS)

Slide 43

Slide 43 text

43 4. HealthConnectͷը໘ભҠ HealthConnectΞϓϦʹભҠͯ͠ɺ ཁٻ͞ΕͨσʔλͷΞΫηεݖݶ ʢಡΈऔΓɺॻ͖ࠐΈʣΛઃఆ͢Δ IV. HealthConnectͷ ݖݶऔಘ

Slide 44

Slide 44 text

IV. HealthConnectͷݖݶऔಘ 44 5. ཁٻ݁Ռ͔Βݖݶ͕ڐՄ͞Ε͔ͨݕূ͢Δ val client: HealthConnectClient = HealthConnectClient.getOrCreate(context) /** @return [PERMISSIONS]ͷݖݶ͢΂͕ͯڐՄ͞Ε͔ͨ */ override suspend fun isAllGranted(): Boolean { return PERMISSION == client.permissionController.getGrantedPermissions(PERMISSION) } /** @return [permissions]ͷݖݶ͕ڐՄ͞Ε͔ͨ */ override suspend fun isGranted(permission: Set): Boolean { return permission == client.permissionController.getGrantedPermissions(permission) }

Slide 45

Slide 45 text

V. HealthConnectͷσʔλಡΈऔΓ 45 ಡΈऔΓϦΫΤετΛੜ੒ͯ͠ɺσʔλΛऔಘ͢Δ /** @return 1೔෼ʢ[date]ʣͷา਺ */ suspend fun readSteps(date: LocalDate): List { val start = date.atStartOfDay().truncatedTo(ChronoUnit.HOURS) val end = start.plusDays(1L).minusMinutes(1L) val timeRange = TimeRangeFilter.between(start, end) val request = ReadRecordsRequest( recordType = StepsRecord::class, timeRangeFilter = timeRange, ) return client.readRecords(request).records }

Slide 46

Slide 46 text

VI. HealthConnectͷσʔλॻ͖ࠐΈ 46 ॻ͖ࠐΈϦΫΤετΛੜ੒ͯ͠ɺσʔλΛऔಘ͢Δ /** ࣮ࢪͨ͠ᛉ૝Λॻ͖ࠐΉ */ suspend fun writeMeditation( title: String, startTime: LocalDateTime, durationMinutes: Long ) { val zoneOffset = OffsetDateTime.now().offset val session = ExerciseSessionRecord( title = title, exerciseType = ExerciseSessionRecord.ExerciseType.MEDITATION, startTime = startTime.minusMinutes(durationMinutes).toInstant(zoneOffset), startZoneOffset = zoneOffset, endTime = startTime.toInstant(zoneOffset), endZoneOffset = zoneOffset, ) client.insertRecords(listOf(session)) }

Slide 47

Slide 47 text

47 HealthConnectʹॻ͖ࠐ͜·Εͨ σʔλ͸ɺHealthConnectΞϓϦͰ छྨຖʹ֬ೝͰ͖Δ VI. HealthConnectͷ σʔλॻ͖ࠐΈ

Slide 48

Slide 48 text

͜ͷηογϣϯͰ࿩͢͜ͱ 48 2022೥ ϔϧεέΞΞϓϦͷͭ͘Γํ 01 02 03 04 ϔϧεέΞΞϓϦ͕ѻ͏σʔλͱϓϥοτϑΥʔϜʹ͍ͭͯ ϓϥοτϑΥʔϜಋೖΛߟ͑Δ HealthConnectͷಋೖ ·ͱΊ

Slide 49

Slide 49 text

·ͱΊ • ϔϧεέΞϓϥοτϑΥʔϜଟ͗͢໰୊Λղܾ͢ΔͨΊͷϓϥοτϑΥʔϜ HealthConnect͕ొ৔ • طଘϓϥοτϑΥʔϜͱൺ΂ΔͱҰ௕Ұ୹͋Δ͕ɺ৽نΞϓϦΛ։ൃ͢Δ؍఺ Ͱ͸Αͦ͞͏ • OSόʔδϣϯɺHealthConnectΞϓϦ͕ΠϯετʔϧࡁΈ͔ɺσʔλछผຖͷ ΞΫηεݖͷঢ়ଶΛߟ͑Δඞཁ͕͋Δ 49