Atribusi data

Setiap titik data di Google Fit memiliki sumber data terkait. Sumber data berisi informasi yang mengidentifikasi aplikasi atau perangkat yang mengumpulkan atau mentransformasi data. Nama paket aplikasi tersedia untuk sumber data yang tidak merepresentasikan sensor fisik.

Google Fit memungkinkan Anda melakukan hal berikut:

  • Panggil intent untuk melihat data yang terkait dengan aplikasi tertentu.
  • Menerima intent untuk menampilkan data menggunakan aplikasi Anda.
  • Cari tahu aplikasi mana yang menyisipkan sesi. Untuk informasi selengkapnya, lihat Bekerja dengan sesi.

Menentukan aplikasi mana yang menyisipkan titik data

Untuk mendapatkan nama paket aplikasi yang menyisipkan titik data, panggil DataPoint.getOriginalDataSource terlebih dahulu untuk mendapatkan sumber data, lalu panggil metode DataSource.getAppPackageName:

Kotlin

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

Java

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

Menerima intent dari aplikasi lain

Untuk mendaftarkan aplikasi Anda guna menerima intent dari aplikasi kesehatan dan kebugaran lainnya, deklarasikan filter intent dalam manifes Anda yang mirip dengan berikut ini:

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

Setiap intent yang diterima aplikasi Anda dari Google Fit hanya dari satu jenis, tetapi Anda dapat memfilter beberapa jenis MIME dalam satu filter intent. Filter intent aplikasi Anda harus menyertakan semua jenis data yang didukung aplikasi Anda, termasuk jenis data kustom.

Intent kebugaran mencakup tambahan berikut:

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

Anda bisa mendapatkan data dari tambahan ini sebagai berikut:

Kotlin

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

Java

@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());
    }
}

Untuk mendapatkan jenis MIME untuk jenis data kustom, gunakan konstanta MIME_TYPE_PREFIX:

Kotlin

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

Java

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

Memanggil intent untuk melihat data

Untuk memanggil intent guna melihat data dengan aplikasi lain, gunakan class HistoryApi.ViewIntentBuilder:

Kotlin

// 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()

Java

// 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();

Pelajari cara menggunakan intent dan filter intent lebih lanjut.