ব্যায়াম রুট যোগ করুন

ব্যায়াম রুট ব্যবহারকারীদের সংশ্লিষ্ট ব্যায়াম ক্রিয়াকলাপের জন্য একটি GPS রুট ট্র্যাক করতে এবং অন্যান্য অ্যাপের সাথে তাদের ওয়ার্কআউটের মানচিত্র শেয়ার করতে দেয়।

এই নির্দেশিকাটি ব্যাখ্যা করে যে কীভাবে অ্যাপগুলি একটি অনুশীলন সেশনের অংশ হিসাবে রুট ডেটা লেখার অনুমতি পায়।

এখানে ব্যায়াম রুটের জন্য পড়া এবং লেখার কার্যকারিতার একটি সংক্ষিপ্ত সারাংশ রয়েছে:

  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>

অনুমতির জন্য অনুরোধ করতে, যখন আপনি প্রথমবার আপনার অ্যাপকে Health Connect-এর সাথে সংযুক্ত করবেন তখন PermissionController.createRequestPermissionResultContract() পদ্ধতি ব্যবহার করুন। আপনি অনুরোধ করতে চাইতে পারেন যে কয়েকটি অনুমতি হল:

  • রুট ডেটা সহ স্বাস্থ্য ডেটা পড়ুন: HealthPermission.getReadPermission(ExerciseSessionRecord::class)
  • রুট ডেটা সহ স্বাস্থ্য ডেটা লিখুন: HealthPermission.getWritePermission(ExerciseSessionRecord::class)
  • ব্যায়াম রুট ডেটা লিখুন: HealthPermission.PERMISSION_WRITE_EXERCISE_ROUTE

রুট ডেটা পড়ুন এবং লিখুন

Apps একটি ক্ষেত্র হিসাবে একটি রুট সহ একটি সেশন লিখে একটি রুট সন্নিবেশ করান৷

ব্যবহারকারীর লেখার অনুমতি না থাকলে এবং রুট সেট না থাকলে, রুট আপডেট হয় না।

যদি আপনার অ্যাপের একটি রুট লেখার অনুমতি থাকে এবং রুট ছাড়াই একটি সেশন অবজেক্টে পাস করে একটি সেশন আপডেট করার চেষ্টা করে, বিদ্যমান রুটটি মুছে ফেলা হয়।

যখনই আপনার অ্যাপের কোনো তৃতীয় পক্ষের অ্যাপ দ্বারা প্রদত্ত রুট ডেটা পড়ার প্রয়োজন হয়, তখন একটি ডায়ালগ প্রদর্শিত হয় যা ব্যবহারকারীকে রিড অপারেশনের অনুমতি দিতে বলে।

একটি অধিবেশন থেকে একটি রুট অনুরোধ

হেলথ কানেক্টে একটি সেশন কীভাবে পড়তে হয় এবং সেই সেশন থেকে একটি রুটের অনুরোধ করতে হয় তা এখানে:

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))
}