Mỗi điểm dữ liệu trong Google Fit đều có một nguồn dữ liệu liên kết. Các nguồn dữ liệu chứa thông tin xác định ứng dụng hoặc thiết bị thu thập hoặc chuyển đổi dữ liệu. Tên gói của ứng dụng có sẵn cho các nguồn dữ liệu không đại diện cho cảm biến thực.
Google Fit cho phép bạn làm những việc sau:
- Gọi một ý định để xem dữ liệu được liên kết với một ứng dụng cụ thể.
- Nhận ý định để hiển thị dữ liệu bằng ứng dụng.
- Tìm hiểu ứng dụng nào đã chèn một phiên hoạt động. Để biết thêm thông tin, hãy xem phần Làm việc với phiên.
Xác định ứng dụng đã chèn một điểm dữ liệu
Để lấy tên gói của ứng dụng đã chèn điểm dữ liệu, trước tiên, hãy gọi DataPoint.getOriginalDataSource
để lấy nguồn dữ liệu, sau đó gọi phương thức 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();
Nhận ý định từ các ứng dụng khác
Để đăng ký ứng dụng của bạn nhằm nhận ý định từ các ứng dụng chăm sóc sức khỏe khác, hãy khai báo bộ lọc ý định trong tệp kê khai tương tự như sau:
<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>
Mỗi ý định mà ứng dụng nhận được từ Google Fit chỉ có một loại, nhưng bạn có thể lọc ra nhiều loại MIME trong một bộ lọc ý định duy nhất. Bộ lọc ý định của ứng dụng cần bao gồm tất cả loại dữ liệu mà ứng dụng của bạn hỗ trợ, bao gồm cả loại dữ liệu tuỳ chỉnh.
Ý định tập thể dục bao gồm những thành phần bổ sung sau:
vnd.google.gms.fitness.start_time
vnd.google.gms.fitness.end_time
vnd.google.gms.fitness.data_source
Bạn có thể lấy dữ liệu từ các dữ liệu bổ sung này như sau:
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()); } }
Để có được loại MIME cho một loại dữ liệu tuỳ chỉnh, hãy sử dụng hằng số
MIME_TYPE_PREFIX
:
Kotlin
val supportedType = DataType.MIME_TYPE_PREFIX + "com.company.customdatatype"
Java
String supportedType = DataType.MIME_TYPE_PREFIX + "com.company.customdatatype";
Gọi một ý định để xem dữ liệu
Để gọi ý định xem dữ liệu bằng một ứng dụng khác, hãy sử dụng lớp
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();
Tìm hiểu thêm về cách sử dụng các ý định và bộ lọc ý định.