انتساب داده ها

هر نقطه داده در Google Fit یک منبع داده مرتبط دارد. منابع داده حاوی اطلاعاتی هستند که برنامه یا دستگاهی را که داده ها را جمع آوری یا تبدیل می کند، شناسایی می کند. نام بسته برنامه برای منابع داده ای که نشان دهنده حسگر فیزیکی نیستند در دسترس است.

Google Fit به شما امکان می دهد کارهای زیر را انجام دهید:

  • برای مشاهده داده هایی که با یک برنامه خاص مرتبط هستند، قصدی را فراخوانی کنید.
  • برای نمایش داده ها با استفاده از برنامه خود قصد دریافت کنید.
  • ببینید کدام برنامه جلسه را وارد کرده است. برای اطلاعات بیشتر، کار با جلسات را ببینید.

تعیین کنید کدام برنامه نقطه داده را وارد کرده است

برای به دست آوردن نام بسته برنامه ای که نقطه داده را وارد کرده است، ابتدا DataPoint.getOriginalDataSource برای دریافت منبع داده، سپس متد DataSource.getAppPackageName را فراخوانی کنید:

کاتلین

val dataPoint : DataPoint = ...
val dataSource = dataPoint.originalDataSource
val appPkgName = dataSource.appPackageName

جاوا

DataPoint dataPoint = ...
DataSource dataSource = dataPoint.getOriginalDataSource();
String appPkgName = dataSource.getAppPackageName();

دریافت مقاصد از برنامه های دیگر

برای ثبت برنامه خود برای دریافت هدف از سایر برنامه‌های سلامت و تندرستی، فیلتری را در مانیفست خود اعلام کنید که مشابه موارد زیر است:

<intent-filter>
    <action android:name="vnd.google.fitness.VIEW" />
    <data android:mimeType="vnd.google.fitness.data_type/com.google.step_count.cumulative" />
    <data android:mimeType="vnd.google.fitness.data_type/com.google.step_count.delta" />
</intent-filter>

هر هدفی که برنامه شما از Google Fit دریافت می‌کند فقط یک نوع است، اما می‌توانید چندین نوع MIME را در یک فیلتر هدف فیلتر کنید. فیلتر هدف برنامه شما باید شامل همه انواع داده‌هایی باشد که برنامه شما پشتیبانی می‌کند، از جمله انواع داده‌های سفارشی.

اهداف تناسب اندام شامل موارد اضافی زیر است:

  • vnd.google.gms.fitness.start_time
  • vnd.google.gms.fitness.end_time
  • vnd.google.gms.fitness.data_source

شما می توانید داده های این موارد اضافی را به صورت زیر بدست آورید:

کاتلین

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    val supportedType = DataType.getMimeType(DataType.TYPE_STEP_COUNT_DELTA)

    if (Intent.ACTION_VIEW == intent.action && supportedType == intent.type) {
        // Get the intent extras
        val startTime = Fitness.getStartTime(intent, TimeUnit.MILLISECONDS);
        val endTime = Fitness.getEndTime(intent, TimeUnit.MILLISECONDS)
        val dataSource = DataSource.extract(intent)
    }
}

جاوا

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    String supportedType = DataType.getMimeType(DataType.TYPE_STEP_COUNT_DELTA);

    if (Intent.ACTION_VIEW.equals(getIntent().getAction()) && supportedType.equals(getIntent().getType())
    {
        // Get the intent extras
        long startTime = Fitness.getStartTime(getIntent(), TimeUnit.MILLISECONDS);
        long endTime = Fitness.getEndTime(getIntent(), TimeUnit.MILLISECONDS);
        DataSource dataSource = DataSource.extract(getIntent());
    }
}

برای بدست آوردن نوع MIME برای یک نوع داده سفارشی، از ثابت MIME_TYPE_PREFIX استفاده کنید:

کاتلین

val supportedType = DataType.MIME_TYPE_PREFIX + "com.company.customdatatype"

جاوا

String supportedType = DataType.MIME_TYPE_PREFIX + "com.company.customdatatype";

یک قصد برای مشاهده داده ها را فراخوانی کنید

برای فراخوانی یک intent برای مشاهده داده ها با یک برنامه دیگر، از کلاس HistoryApi.ViewIntentBuilder استفاده کنید:

کاتلین

// Inside your activity
val startTime = ...
val endTime = ...
val dataSource = ...
val dataType = ...

val fitIntent = HistoryApi.ViewIntentBuilder(this, dataType)
    .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)
    .setDataSource(dataSource) // Optional if a specific data source is desired
    .setPreferredApplication("com.example.app") // Optional if you'd like a
    // specific app to handle the intent if that app is installed on the device
    .build()

جاوا

// Inside your activity
long startTime = ...
long endTime = ...
DataSource dataSource = ...
DataType dataType = ...

Intent fitIntent = new HistoryApi.ViewIntentBuilder(this, dataType)
    .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)
    .setDataSource(dataSource) // Optional if a specific data source is desired
    .setPreferredApplication("com.example.app") // Optional if you'd like a
    // specific app to handle the intent if that app is installed on the device
    .build();

درباره نحوه استفاده از intent ها و فیلترهای هدف بیشتر بیاموزید.