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.