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 tersebut. Nama paket aplikasi tersedia untuk sumber data yang tidak mewakili sensor fisik.

Google Fit memungkinkan Anda melakukan hal berikut:

  • Memanggil 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 selengkapnya lihat Bekerja dengan sesi.

Menentukan aplikasi yang menyisipkan titik data

Untuk mendapatkan nama paket aplikasi yang memasukkan titik data, pertama-tama panggil DataPoint.getOriginalDataSource untuk mendapatkan sumber data, lalu panggil DataSource.getAppPackageName berikut:

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 yang serupa dengan yang 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 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 menyertakan 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 menampilkan data

Untuk memanggil intent guna menampilkan data dengan aplikasi lain, gunakan metode 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.