Google 健身中的每个数据点都有关联的数据源。数据源 包含用于识别收集或 转换数据。应用的软件包名称适用于数据源 不代表物理传感器的图片。
通过 Google 健身,您可以执行以下操作:
确定哪个应用插入了数据点
要获取插入数据点的应用的软件包名称,首先
调用 DataPoint.getOriginalDataSource
以获取数据源,然后调用
DataSource.getAppPackageName
方法:
val dataPoint : DataPoint = ...
val dataSource = dataPoint.originalDataSource
val appPkgName = dataSource.appPackageName
DataPoint dataPoint = ...
DataSource dataSource = dataPoint.getOriginalDataSource();
String appPkgName = dataSource.getAppPackageName();
接收来自其他应用的 intent
如需注册您的应用以接收来自其他健康与保健应用的 intent,请按以下步骤操作: 在清单中声明一个类似于以下内容的 intent 过滤器:
<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 健身收到的每个 intent 都只属于一种类型, 但您可以在单个 intent 过滤器中过滤多个 MIME 类型。您应用的 intent 过滤器需要包含应用支持的所有数据类型, 包括自定义数据类型
健身 intent 包括以下 extra:
vnd.google.gms.fitness.start_time
vnd.google.gms.fitness.end_time
vnd.google.gms.fitness.data_source
您可以按如下方式从这些 extra 中获取数据:
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)
}
}
@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
常量:
val supportedType = DataType.MIME_TYPE_PREFIX + "com.company.customdatatype"
String supportedType = DataType.MIME_TYPE_PREFIX + "com.company.customdatatype";
调用 intent 以查看数据
如需调用 intent 以通过另一个应用查看数据,请使用
HistoryApi.ViewIntentBuilder
类:
// 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()
// 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();
详细了解如何使用意图和意图 过滤器。