कसरत के रूट जोड़ें

कसरत के रूट की मदद से उपयोगकर्ता जीपीएस रूट को ट्रैक कर सकते हैं. और अन्य ऐप्लिकेशन के साथ अपने वर्कआउट के मैप शेयर करें.

इस गाइड में बताया गया है कि ऐप्लिकेशन को रूट डेटा में बदलाव करने की अनुमति कैसे मिलती है एक व्यायाम सत्र में.

यहां कसरत के रूट के लिए, पढ़ने और लिखने की सुविधा के बारे में खास जानकारी दी गई है:

  1. ऐप्लिकेशन, कसरत के रूट के लिए लिखने की नई अनुमति बनाते हैं.
  2. इंसर्शन, किसी कसरत के सेशन को लिखने के दौरान होती है, जिसमें रूट के फ़ील्ड के तौर पर रूट शामिल होता है.
  3. पढ़ना:
    1. सेशन के मालिक के लिए, डेटा को सेशन रीड का इस्तेमाल करके ऐक्सेस किया जाता है.
    2. तीसरे पक्ष के ऐप्लिकेशन से, एक डायलॉग के ज़रिए उपयोगकर्ता किसी रास्ते को एक बार पढ़ना.

अनुमतियां

कसरत के रूट में, रनटाइम में लिखने की अनुमति होती है (android.permission.health.WRITE_EXERCISE_ROUTE).

अपने ऐप्लिकेशन में कसरत के रूट की सुविधा जोड़ने के लिए, लिखने का अनुरोध करके शुरुआत करें अनुमतियां दी होती हैं.

Android 14 के लिए अनुमति का अनुरोध

Android 14 के लिए अनुमति का अनुरोध

Android 13 के लिए अनुमति का अनुरोध

Android 13 के लिए अनुमति का अनुरोध

आपको कसरत की अनुमति का भी एलान करना होगा, क्योंकि हर रूट जुड़ा हुआ है कसरत के एक सेशन के साथ (एक सेशन = एक कसरत).

कसरत के रूट लिखने के लिए, आपको यह अनुमति एलान करनी होगी:

<application>
  <uses-permission
android:name="android.permission.health.WRITE_EXERCISE_ROUTE" />
  <uses-permission
android:name="android.permission.health.WRITE_EXERCISE" />
...
</application>

कसरत के रूट पढ़ने के लिए, आपको इन अनुमतियों का अनुरोध करना होगा:

<application>
  <uses-permission
android:name="android.permission.health.READ_EXERCISE_ROUTES" />
  <uses-permission
android:name="android.permission.health.READ_EXERCISE" />
...
</application>

अनुमतियों का अनुरोध करने के लिए, PermissionController.createRequestPermissionResultContract() तरीका, जब सबसे पहले, अपने ऐप्लिकेशन को Health Connect से कनेक्ट करें. कई अनुमतियां, जो आपके पास हो सकती हैं आप इसके लिए अनुरोध करना चाहते हैं:

  • स्वास्थ्य की जानकारी से जुड़ा डेटा पढ़ें. इसमें रास्ते का डेटा भी शामिल है: HealthPermission.getReadPermission(ExerciseSessionRecord::class) अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  • रास्ते का डेटा सहित सेहत से जुड़ा डेटा लिखें: HealthPermission.getWritePermission(ExerciseSessionRecord::class) अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
  • कसरत के रूट का डेटा लिखें: HealthPermission.PERMISSION_WRITE_EXERCISE_ROUTE

रास्ते का डेटा पढ़ें और लिखें

ऐप्लिकेशन, रूट के साथ सेशन को फ़ील्ड के तौर पर लिखकर रूट शामिल करते हैं.

अगर उपयोगकर्ता के पास लिखने की अनुमतियां नहीं हैं और रूट सेट नहीं किया गया है, तो अपडेट नहीं होता.

अगर आपके ऐप्लिकेशन के पास रूट में बदलाव करने की अनुमति है और वह सेशन सेशन ऑब्जेक्ट में बिना रूट के पासिंग करने से, मौजूदा रूट मिटा दिया जाता है.

जब भी आपके ऐप्लिकेशन को तीसरे पक्ष के किसी ऐप्लिकेशन से मिले रास्ते की जानकारी देखने की ज़रूरत होती है, तो एक डायलॉग बॉक्स दिखता है, जिसमें उपयोगकर्ता से रीड ऑपरेशन की अनुमति देने के लिए कहा जाता है.

सेशन के दौरान रूट का अनुरोध करना

Health Connect में किसी सेशन को पढ़ने और उससे रूट का अनुरोध करने का तरीका यहां बताया गया है सेशन:

suspend fun readExerciseSessionAndRoute() {
    val grantedPermissions =
        healthConnectClient.permissionController.getGrantedPermissions()
    if (!grantedPermissions.contains(
          HealthPermission.getReadPermission(ExerciseSessionRecord::class))) {
        // The user doesn't allow the app to read exercise session data.
        return
    }

    val readResponse =
      healthConnectClient.readRecords(
        ReadRecordsRequest(
          ExerciseSessionRecord::class,
          TimeRangeFilter.between(startTime, endTime)
        )
      )
    val exerciseRecord = readResponse.records.first()

    // See https://developer.android.com/training/basics/intents/result#launch
    // for appropriately handling ActivityResultContract.
    val requestExerciseRouteLauncher = fragment.registerForActivityResul
    (ExerciseRouteRequestContract()) { exerciseRoute: ExerciseRoute? ->
            if (exerciseRoute != null) {
                displayExerciseRoute(exerciseRoute)
            } else {
                // Consent was denied
            }
        }

    val exerciseSessionRecord =
      healthConnectClient.readRecord(ExerciseSessionRecord::class, recordId).record

    when (val exerciseRouteResult = exerciseSessionRecord.exerciseRouteResult) {
        is ExerciseRouteResult.Data ->
            displayExerciseRoute(exerciseRouteResult.exerciseRoute)
        is ExerciseRouteResult.ConsentRequired ->
            requestExerciseRouteLauncher.launch(recordId)
        is ExerciseRouteResult.NoData -> Unit // No exercise route to show
        else -> Unit
    }
  }

  fun displayExerciseRoute(route: ExerciseRoute?) {
    val locations = route.route.orEmpty()
    for (location in locations) {
      // Handle location.
    }
  }

किसी सेशन के बाद रूट का डेटा सेव करना

नीचे दिया गया कोड उस सेशन को रिकॉर्ड करने का तरीका बताता है जिसमें कसरत का रूट:

suspend fun InsertExerciseRoute(healthConnectClient: HealthConnectClient) {
    val grantedPermissions =
        healthConnectClient.permissionController.getGrantedPermissions()
    if (!grantedPermissions.contains(
          getWritePermission(ExerciseSessionRecord::class))) {
        // The user doesn't allow the app to write exercise session data.
        return
    }

    val sessionStartTime = Instant.parse("2023-01-01T10:00:00.00Z")
    val sessionDuration = Duration.ofMinutes(20)

    val exerciseRoute =
      if (getPermissions.contains(PERMISSION_EXERCISE_ROUTE_WRITE) {
        ExerciseRoute(
          listOf(
            ExerciseRoute.Location(
              time = sessionStartTime
              latitude = 6.5483
              longitude = 0.5488
              horizontalAccuracy = Length.meters(2.0)
              verticalAccuracy = Length.meters(2.0),
              altitude = Length.meters(9.0)
            ),
            ExerciseRoute.Location(
              time = sessionStartTime.plus(sessionDuration)
              latitude = 6.4578
              longitude = 0.6577
              horizontalAccuracy = Length.meters(2.0)
              verticalAccuracy = Length.meters(2.0),
              altitude = Length.meters(9.2)
            )
          )
        )
      } else {
        // The user doesn't allow the app to write exercise route data.
        null
      }

    val exerciseSessionRecord =
        ExerciseSessionRecord(
            startTime = /* starting time in milliseconds */,
            startZoneOffset = ZoneOffset.UTC,
            endTime = sessionStartTime.plus(sessionDuration),
            endZoneOffset = ZoneOffset.UTC,
            exerciseType = ExerciseSessionRecord.EXERCISE_TYPE_BIKING,
            title = "Morning Bike Ride",
            exerciseRoute = exerciseRoute
        )

    healthConnectClient.insertRecords(listOf(exerciseSessionRecord))
}