เซสชันจะแสดงช่วงเวลาระหว่างที่ผู้ใช้ ทำกิจกรรมการออกกำลังกาย Sessions API ช่วยให้แอปของคุณสร้างเซสชันใน ร้านฟิตเนส
สำหรับกิจกรรมการออกกำลังกายต่อเนื่องซึ่งผู้ใช้แจ้งแอปของคุณเมื่อเริ่มกิจกรรม และทำกิจกรรมออกกำลังกายให้เสร็จ คุณสามารถสร้างเซสชันแบบเรียลไทม์ได้
คุณยังแทรกเซสชันลงในร้านค้าฟิตเนสหลังจากทำกิจกรรมฟิตเนสได้ด้วย เสร็จสิ้นหรือเมื่อคุณนำเข้าข้อมูลและเซสชันจากภายนอก Google Fit
สร้างเซสชันแบบเรียลไทม์
หากต้องการสร้างเซสชันสำหรับกิจกรรมการออกกำลังกายต่อเนื่อง ให้ทำตามขั้นตอนต่อไปนี้
สมัครใช้บริการข้อมูลการออกกำลังกาย โดยใช้
RecordingClient.subscribe
เริ่มเซสชันโดยใช้
SessionsClient.startSession
เมื่อผู้ใช้เริ่มกิจกรรมการออกกำลังกายหยุดเซสชันโดยใช้
SessionsClient.stopSession
เมื่อผู้ใช้สิ้นสุดกิจกรรมการออกกำลังกายยกเลิกการสมัครรับข้อมูลการออกกำลังกาย ที่คุณไม่สนใจที่จะใช้
RecordingClient.unsubscribe
เริ่มเซสชัน
หากต้องการเริ่มเซสชันในแอป ให้ใช้เมธอด SessionsClient.startSession
ดังนี้
Kotlin
// 1. Subscribe to fitness data // 2. Create a session object // (provide a name, identifier, description, activity and start time) val session = Session.Builder() .setName(sessionName) .setIdentifier("UniqueIdentifierHere") .setDescription("Morning run") .setActivity(FitnessActivities.RUNNING) .setStartTime(startTime, TimeUnit.MILLISECONDS) .build() // 3. Use the Sessions client to start a session: Fitness.getSessionsClient(this, googleSigninAccount) .startSession(session) .addOnSuccessListener { Log.i(TAG, "Session started successfully!") } .addOnFailureListener { e -> Log.w(TAG, "There was an error starting the session", e) }
Java
// 1. Subscribe to fitness data // 2. Create a session object // (provide a name, identifier, description, activity and start time) Session session = new Session.Builder() .setName(sessionName) .setIdentifier("UniqueIdentifierHere") .setDescription("Morning run") .setActivity(FitnessActivities.RUNNING) .setStartTime(startTime, TimeUnit.MILLISECONDS) .build(); // 3. Use the Sessions client to start a session: Fitness.getSessionsClient(this, googleSigninAccount) .startSession(session) .addOnSuccessListener(unused -> Log.i(TAG, "Session started successfully!")) .addOnFailureListener(e -> Log.w(TAG, "There was an error starting the session", e));
หยุดเซสชัน
หากต้องการหยุดเซสชันในแอป ให้ใช้เมธอด SessionsClient.stopSession
ดังนี้
Kotlin
// Invoke the SessionsClient with the session identifier Fitness.getSessionsClient(this, googleSigninAccount) .stopSession(session.getIdentifier()) .addOnSuccessListener { Log.i(TAG, "Session stopped successfully!") // Now unsubscribe from the fitness data (see // Recording Fitness data) } .addOnFailureListener { e -> Log.w(TAG, "There was an error stopping the session", e) }
Java
// Invoke the SessionsClient with the session identifier Fitness.getSessionsClient(this, googleSigninAccount) .stopSession(session.getIdentifier()) .addOnSuccessListener (unused -> { Log.i(TAG, "Session stopped successfully!"); // Now unsubscribe from the fitness data (see // Recording Fitness data) }) .addOnFailureListener(e -> Log.w(TAG, "There was an error stopping the session", e));
เซสชันที่ได้จะมีพารามิเตอร์ต่อไปนี้
เวลาเริ่มต้น: เวลาที่แอปเรียกใช้
SessionsClient.startSession
เวลาสิ้นสุด: เวลาที่แอปเรียกใช้
SessionsClient.stopSession
ชื่อ: ชื่อในออบเจ็กต์
Session
ที่คุณส่งไปยังSessionsClient.startSession
แทรกเซสชันในร้านฟิตเนส
หากต้องการแทรกเซสชันด้วยข้อมูลที่คุณรวบรวมไว้ก่อนหน้านี้ ให้ทำดังนี้
สร้างออบเจ็กต์
Session
ที่ระบุช่วงเวลาและอื่นๆ ที่จำเป็นสร้าง
SessionInsertRequest
กับเซสชันนั้นๆเพิ่มชุดข้อมูลและรวมจุดข้อมูล (ไม่บังคับ)
แทรกเซสชันโดยใช้
SessionsClient.insertSession
แทรกเซสชัน
เพื่อแทรกข้อมูลการออกกำลังกายที่มีข้อมูลเมตาเซสชันลงในข้อมูลการออกกำลังกายของผู้ใช้
ให้สร้างอินสแตนซ์ SessionInsertRequest
ก่อน
Kotlin
// Create a session with metadata about the activity. val session = Session.Builder() .setName(SAMPLE_SESSION_NAME) .setIdentifier("UniqueIdentifierHere") .setDescription("Long run around Shoreline Park") .setActivity(FitnessActivities.RUNNING) .setStartTime(startTime, TimeUnit.MILLISECONDS) .setEndTime(endTime, TimeUnit.MILLISECONDS) .build() // Build a session insert request val insertRequest = SessionInsertRequest.Builder() .setSession(session) // Optionally add DataSets for this session. .addDataSet(dataset) .build()
Java
// Create a session with metadata about the activity. Session session = new Session.Builder() .setName(SAMPLE_SESSION_NAME) .setIdentifier("UniqueIdentifierHere") .setDescription("Long run around Shoreline Park") .setActivity(FitnessActivities.RUNNING) .setStartTime(startTime, TimeUnit.MILLISECONDS) .setEndTime(endTime, TimeUnit.MILLISECONDS) .build(); // Build a session insert request SessionInsertRequest insertRequest = new SessionInsertRequest.Builder() .setSession(session) // Optionally add DataSets for this session. .addDataSet(dataset) .build();
คลาส SessionInsertRequest
มอบวิธีที่สะดวกในการแทรกข้อมูล
ลงในประวัติการออกกำลังกาย และสร้างเซสชันใน
การเรียกใช้เดียวกัน
SessionsClient.insertSession
ชุดข้อมูล (หากมี) จะแทรกเสมือนว่าคุณ
ได้เรียกใช้
HistoryClient.insertData
ก่อน จากนั้นจึงสร้างเซสชัน
Kotlin
Fitness.getSessionsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions)) .insertSession(insertRequest) .addOnSuccessListener { Log.i(TAG, "Session insert was successful!") } .addOnFailureListener { e -> Log.w(TAG, "There was a problem inserting the session: ", e) }
Java
Fitness.getSessionsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions)) .insertSession(insertRequest) .addOnSuccessListener (unused -> Log.i(TAG, "Session insert was successful!")) .addOnFailureListener(e -> Log.w(TAG, "There was a problem inserting the session: ", e));
แทรกกลุ่มกิจกรรม
ข้อมูลกลุ่มกิจกรรมใน Google Fit บ่งชี้กิจกรรมการออกกำลังกาย
ผู้ใช้ดำเนินการในระยะเวลาที่กำหนด ข้อมูลกลุ่มกิจกรรมคือ
ของประเภท com.google.activity.segment
(TYPE_ACTIVITY_SEGMENT
)
และเหมาะอย่างยิ่งสำหรับการหยุดชั่วคราวระหว่างการออกกำลังกาย
ตัวอย่างเช่น ถ้าคุณสร้างเซสชันการวิ่ง 30 นาทีด้วยแท็ก
Session.Builder.setActivity()
แต่ผู้ใช้หยุดพัก 10 นาทีระหว่างนั้น แอปของคุณจะ
แสดงอย่างไม่ถูกต้องว่าผู้ใช้วิ่งเป็นเวลา 30 นาที โดยมีเงื่อนไขว่าแอปของคุณสามารถ
ดูว่าผู้ใช้กำลังเดินหรือวิ่ง ข้อมูลกลุ่มกิจกรรมจะช่วยให้
แอประบุว่าผู้ใช้วิ่ง 10 นาที เดิน 10 นาที แล้ววิ่ง
ต่ออีก 10 นาที แอปอื่นๆ สามารถรายงานกิจกรรมได้อย่างถูกต้อง
โดยดูข้อมูลกลุ่มกิจกรรมที่คุณแทรกไว้
หากต้องการเพิ่มข้อมูลกลุ่มกิจกรรมลงในเซสชัน ให้สร้างชุดข้อมูลที่มีจุด
ประเภท com.google.activity.segment
แต่ละจุดเหล่านี้แสดงถึง
ช่วงเวลาต่อเนื่องที่ผู้ใช้ทำกิจกรรมประเภทเดียว
ตัวอย่างการวิ่งและการเดินก่อนหน้านี้จะต้องมีกลุ่มกิจกรรม 3 กลุ่ม คะแนน: หนึ่งคะแนนสำหรับการวิ่งช่วง 10 นาทีแรก หนึ่งคะแนนสำหรับการเดิน ในช่วง 10 นาทีถัดไป และรายการหนึ่งสำหรับวิ่งในช่วง 10 นาทีสุดท้าย
Kotlin
// Create a DataSet of ActivitySegments to indicate the runner walked for // 10 minutes in the middle of a run. val activitySegmentDataSource = DataSource.Builder() .setAppPackageName(this.packageName) .setDataType(DataType.TYPE_ACTIVITY_SEGMENT) .setStreamName(SAMPLE_SESSION_NAME + "-activity segments") .setType(DataSource.TYPE_RAW) .build() val firstRunningDp = DataPoint.builder(activitySegmentDataSource) .setActivityField(Field.FIELD_ACTIVITY, FitnessActivities.RUNNING) .setTimeInterval(startTime, startWalkTime, TimeUnit.MILLISECONDS) .build() val walkingDp = DataPoint.builder(activitySegmentDataSource) .setActivityField(Field.FIELD_ACTIVITY, FitnessActivities.WALKING) .setTimeInterval(startWalkTime, endWalkTime, TimeUnit.MILLISECONDS) .build() val secondRunningDp = DataPoint.builder(activitySegmentDataSource) .setActivityField(Field.FIELD_ACTIVITY, FitnessActivities.RUNNING) .setTimeInterval(endWalkTime, endTime, TimeUnit.MILLISECONDS) .build() val activitySegments = DataSet.builder(activitySegmentDataSource) .addAll(listOf(firstRunningDp, walkingDp, secondRunningDp)) .build() // Create a session with metadata about the activity. val session = Session.Builder() .setName(SAMPLE_SESSION_NAME) .setDescription("Long run around Shoreline Park") .setIdentifier("UniqueIdentifierHere") .setActivity(FitnessActivities.RUNNING) .setStartTime(startTime, TimeUnit.MILLISECONDS) .setEndTime(endTime, TimeUnit.MILLISECONDS) .build() // Build a session insert request val insertRequest = SessionInsertRequest.Builder() .setSession(session) .addDataSet(activitySegments) .build()
Java
// Create a DataSet of ActivitySegments to indicate the runner walked for // 10 minutes in the middle of a run. DataSource activitySegmentDataSource = new DataSource.Builder() .setAppPackageName(getPackageName()) .setDataType(DataType.TYPE_ACTIVITY_SEGMENT) .setStreamName(SAMPLE_SESSION_NAME + "-activity segments") .setType(DataSource.TYPE_RAW) .build(); DataPoint firstRunningDp = DataPoint.builder(activitySegmentDataSource) .setActivityField(Field.FIELD_ACTIVITY, FitnessActivities.RUNNING) .setTimeInterval(startTime, startWalkTime, TimeUnit.MILLISECONDS) .build(); DataPoint walkingDp = DataPoint.builder(activitySegmentDataSource) .setActivityField(Field.FIELD_ACTIVITY, FitnessActivities.WALKING) .setTimeInterval(startWalkTime, endWalkTime, TimeUnit.MILLISECONDS) .build(); DataPoint secondRunningDp = DataPoint.builder(activitySegmentDataSource) .setActivityField(Field.FIELD_ACTIVITY, FitnessActivities.RUNNING) .setTimeInterval(endWalkTime, endTime, TimeUnit.MILLISECONDS) .build(); DataSet activitySegments = DataSet.builder(activitySegmentDataSource) .addAll(Arrays.asList(firstRunningDp, walkingDp, secondRunningDp)) .build(); // Create a session with metadata about the activity. Session session = new Session.Builder() .setName(SAMPLE_SESSION_NAME) .setDescription("Long run around Shoreline Park") .setIdentifier("UniqueIdentifierHere") .setActivity(FitnessActivities.RUNNING) .setStartTime(startTime, TimeUnit.MILLISECONDS) .setEndTime(endTime, TimeUnit.MILLISECONDS) .build(); // Build a session insert request SessionInsertRequest insertRequest = new SessionInsertRequest.Builder() .setSession(session) .addDataSet(activitySegments) .build();
อ่านข้อมูลการออกกำลังกายโดยใช้เซสชัน
Sessions API ช่วยให้คุณรับรายการเซสชันจากร้านค้าฟิตเนสที่ ตรงกับเกณฑ์บางอย่าง ตัวอย่างเช่น คุณสามารถดูเซสชันทั้งหมดที่มีอยู่ใน ระยะเวลาหนึ่งๆ หรือดูเซสชันหนึ่งๆ ตามชื่อหรือรหัส คุณสามารถระบุ ไม่ว่าคุณจะสนใจเซสชันที่สร้างโดยแอปของคุณหรือแอปใดก็ตาม
หากต้องการดูรายการเซสชันที่ตรงกับเกณฑ์บางอย่าง ก่อนอื่นให้สร้าง
อินสแตนซ์ SessionReadRequest
รายการ:
Kotlin
// Use a start time of 1 week ago and an end time of now. val endTime = LocalDateTime.now().atZone(ZoneId.systemDefault()) val startTime = endTime.minusWeeks(1) // Build a session read request val readRequest = SessionReadRequest.Builder() .setTimeInterval(startTime.toEpochSecond(), endTime.toEpochSecond(), TimeUnit.SECONDS) .read(DataType.TYPE_SPEED) .setSessionName(SAMPLE_SESSION_NAME) .build()
Java
// Use a start time of 1 week ago and an end time of now. ZonedDateTime endTime = LocalDateTime.now().atZone(ZoneId.systemDefault()) ZonedDateTime startTime = endTime.minusWeeks(1) // Build a session read request SessionReadRequest readRequest = new SessionReadRequest.Builder() .setTimeInterval(startTime.toEpochSecond(), endTime.toEpochSecond(), TimeUnit.SECONDS) .read(DataType.TYPE_SPEED) .setSessionName(SAMPLE_SESSION_NAME) .build();
จากนั้นใช้
SessionsClient.readSession
วิธีการ:
Kotlin
Fitness.getSessionsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions)) .readSession(readRequest) .addOnSuccessListener { response -> // Get a list of the sessions that match the criteria to check the result. val sessions = response.sessions Log.i(TAG, "Number of returned sessions is: ${sessions.size}") for (session in sessions) { // Process the session dumpSession(session) // Process the data sets for this session val dataSets = response.getDataSet(session) for (dataSet in dataSets) { // ... } } } .addOnFailureListener { e -> Log.w(TAG,"Failed to read session", e) }
Java
Fitness.getSessionsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions)) .readSession(readRequest) .addOnSuccessListener(response -> { // Get a list of the sessions that match the criteria to check the // result. List<Session> sessions = response.getSessions(); Log.i(TAG, "Number of returned sessions is: ${sessions.size}"); for (Session session : sessions) { // Process the session dumpSession(session); // Process the data sets for this session List<DataSet> dataSets = response.getDataSet(session); for (DataSet dataSet : dataSets) { // ... } } }) .addOnFailureListener(e -> Log.w(TAG,"Failed to read session", e));
อ่านข้อมูลการนอนหลับโดยใช้เซสชัน
เซสชันการนอนหลับถือว่าแตกต่างจากเซสชันกิจกรรมอื่นๆ โดยค่าเริ่มต้น คำตอบที่อ่านแล้วมีเฉพาะเซสชันกิจกรรมเท่านั้น ไม่มีเซสชันการนอนหลับ
หากต้องการรวมเซสชันการนอนหลับ ให้ใช้
includeSleepSessions
เมื่อคุณสร้าง SessionReadRequest
เพื่อให้มีทั้งกิจกรรมและ
ให้ใช้ทั้ง includeSleepSessions
และ
includeActivitySessions
แสดงเซสชันในแอปอื่นๆ
หากต้องการแสดงมุมมองที่ละเอียดยิ่งขึ้นของเซสชันหนึ่งๆ ในแอปอื่น แอปของคุณสามารถเรียกใช้ Intent ที่มีข้อมูลเซสชันได้ คุณสามารถ ระบุแอปเฉพาะ เช่น แอปที่สร้างเซสชัน หรือในกรณีที่ ไม่ได้ติดตั้งแอปที่สร้างเซสชันไว้ในอุปกรณ์ คุณสามารถอนุญาต แอปที่แสดงกิจกรรมการออกกำลังกายเพื่อตอบสนองต่อความตั้งใจได้
หากต้องการสร้าง Intent ในการแสดงข้อมูลเซสชันในแอปอื่น ให้ใช้
SessionsApi.ViewIntentBuilder
ชั้นเรียน:
Kotlin
// Pass your activity object to the constructor val intent = SessionsApi.ViewIntentBuilder(this) .setPreferredApplication("com.example.someapp") // optional .setSession(session) .build() // Invoke the intent startActivity(intent)
Java
// Pass your activity object to the constructor Intent intent = new SessionsApi.ViewIntentBuilder(this) .setPreferredApplication("com.example.someapp") // optional .setSession(session) .build(); // Invoke the intent startActivity(intent);
รับ Intent จากแอปอื่นๆ
หากต้องการลงทะเบียนแอปเพื่อรับ Intent จากแอปสุขภาพและความเป็นอยู่ที่ดีอื่นๆ ประกาศตัวกรอง Intent ในไฟล์ Manifest ซึ่งคล้ายกับตัวอย่างต่อไปนี้
<intent-filter>
<action android:name="vnd.google.fitness.VIEW"/>
<data android:mimeType="vnd.google.fitness.session/running"/>
</intent-filter>
Intent แต่ละรายการที่แอปได้รับจาก Google Fit มีจุดประสงค์เพียงรายการเดียว กิจกรรม แต่คุณจะกรองเจอประเภท MIME หลายประเภทในตัวกรอง Intent เดียวได้ ตัวกรอง Intent ของแอปต้องมีกิจกรรมทั้งหมดที่แอป รองรับ
จุดประสงค์ในการออกกำลังกายมีดังต่อไปนี้
vnd.google.gms.fitness.start_time
vnd.google.gms.fitness.end_time
vnd.google.gms.fitness.session
คุณสามารถรับข้อมูลจากรายการเพิ่มเติมเหล่านี้:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ... val supportedType = Session.getMimeType(FitnessActivities.RUNNING) 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 session = Session.extract(intent) } }
Java
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... String supportedType = Session.getMimeType(FitnessActivities.RUNNING); 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); Session session = Session.extract(getIntent()); } }