Google Fit の各データポイントには、データソースが関連付けられています。データソース データを収集または管理するアプリやデバイスを特定する情報 データを変換しますアプリのパッケージ名をデータソースで使用できる 物理センサーを表すものではありません
Google Fit では、次のことができます。
- インテントを呼び出して、特定のアプリに関連付けられたデータを表示します。
- アプリを使用してデータを表示するインテントを受け取る。
- セッションを挿入したアプリを特定します。詳細については、セッションの操作をご覧ください。
データポイントを挿入したアプリを確認する
データポイントを挿入したアプリのパッケージ名を取得するには、まず
DataPoint.getOriginalDataSource
を呼び出す
データソースを取得してから、
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();
他のアプリからインテントを受け取る
他の健康&ウェルネス アプリからインテントを受け取るようにアプリを登録するには: マニフェストで次のようにインテント フィルタを宣言します。
<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>
アプリが Google Fit から受け取るインテントは、それぞれ 1 種類のみです。 1 つのインテント フィルタで複数の MIME タイプをフィルタリングできます。アプリの インテント フィルタには、アプリがサポートするすべてのデータ型を含める必要があります。 カスタムデータ型が含まれます
フィットネス インテントには、次のエクストラが含まれます。
vnd.google.gms.fitness.start_time
vnd.google.gms.fitness.end_time
vnd.google.gms.fitness.data_source
これらのエクストラからデータを取得するには、次のようにします。
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()); } }
カスタムデータ型の MIME タイプを取得するには、
MIME_TYPE_PREFIX
定数:
Kotlin
val supportedType = DataType.MIME_TYPE_PREFIX + "com.company.customdatatype"
Java
String supportedType = DataType.MIME_TYPE_PREFIX + "com.company.customdatatype";
インテントを呼び出してデータを表示する
別のアプリでデータを表示するインテントを呼び出すには、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();
詳しくは、インテントとインテント フィルタの使用方法をご覧ください。