Nguồn đóng góp dữ liệu

Mỗi điểm dữ liệu trong Google Fit đều có một nguồn dữ liệu liên kết. Nguồn dữ liệu chứa thông tin nhận dạng ứng dụng hoặc thiết bị thu thập hoặc biến đổi dữ liệu. Tên gói của ứng dụng được cung cấp cho các nguồn dữ liệu không đại diện cho cảm biến vật lý.

Google Fit cho phép bạn làm những việc sau:

  • Gọi một ý định để xem dữ liệu 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 của bạn.
  • 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 các phiên hoạt động.

Xác định ứng dụng nào đã chèn đ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ý cho ứng dụng của bạn nhận ý định từ các ứng dụng sức khoẻ thể chất và tinh thần 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 của bạn nhận được từ Google Fit chỉ thuộc một loại, nhưng bạn có thể lọc 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 mọi kiểu dữ liệu mà ứng dụng hỗ trợ, bao gồm cả các kiểu dữ liệu tuỳ chỉnh.

Ý định về hoạt động thể dục bao gồm các dữ liệu 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());
    }
}

Để lấy loại MIME cho 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 một ý đị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 bộ lọc ý định và ý định.