Atribusi data

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

Google Fit memungkinkan Anda melakukan hal berikut:

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

Menentukan aplikasi yang menyisipkan titik data

Untuk mendapatkan nama paket aplikasi yang menyisipkan titik data, pertama-tama panggil DataPoint.getOriginalDataSource 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 agar dapat menerima intent dari aplikasi kesehatan dan kebugaran lainnya, deklarasikan filter intent dalam manifes yang mirip dengan berikut:

<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 terdiri dari satu jenis, tetapi Anda dapat memfilter beberapa jenis MIME dalam satu filter intent. Aplikasi Anda filter intent harus menyertakan semua jenis data yang didukung aplikasi Anda, termasuk jenis data khusus.

Intent kebugaran mencakup tambahan berikut:

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

Anda dapat memperoleh 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 metode MIME_TYPE_PREFIX konstanta:

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 lebih lanjut cara menggunakan intent dan intent filter.