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.
- 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 memasukkan 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 agar menerima intent dari aplikasi kesehatan dan kebugaran lainnya, deklarasikan filter intent dalam manifes yang mirip 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 merupakan 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, termasuk jenis data kustom.
Intent kebugaran menyertakan 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 lebih lanjut cara menggunakan intent dan filter intent.