सेशन उस समय अंतराल को दिखाते हैं जिस दौरान उपयोगकर्ता फ़िटनेस से जुड़ी कोई गतिविधि करते हैं. सेशन एपीआई की मदद से, आपका ऐप्लिकेशन फ़िटनेस स्टोर में सेशन बना सकता है.
फ़िटनेस से जुड़ी ऐसी गतिविधियों के लिए रीयल टाइम में सेशन बनाए जा सकते हैं जिनमें उपयोगकर्ता, आपके फ़िटनेस शुरू करने और खत्म होने पर आपके ऐप्लिकेशन के बारे में सूचना देता है.
फ़िटनेस गतिविधि के खत्म होने के बाद या 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
) का होता है और यह कसरत के दौरान रोकने के लिए होता है.
उदाहरण के लिए, अगर आप Session.Builder.setActivity()
तरीके से 30 मिनट का रनिंग सेशन बनाते हैं, लेकिन उपयोगकर्ता बीच में 10 मिनट का ब्रेक ले लेता है, तो आपका ऐप्लिकेशन गलत तरीके से दिखाएगा कि उपयोगकर्ता 30 मिनट के लिए दौड़ा. जैसा कि बताया गया है कि आपका ऐप्लिकेशन यह पता लगा सकता है कि उपयोगकर्ता पैदल चल रहा है या कैंपेन चला रहा है, वह आपके ऐप्लिकेशन को यह बताने देता है कि उपयोगकर्ता 10 मिनट तक चला, 10 मिनट तक चला, और फिर 10 मिनट और चला. दूसरे ऐप्लिकेशन, आपके ज़रिए शामिल किए गए गतिविधि सेगमेंट डेटा को देखकर गतिविधि की सही तरीके से रिपोर्ट भी कर सकते हैं.
किसी सेशन में गतिविधि वाले सेगमेंट का डेटा जोड़ने के लिए, एक ऐसा डेटासेट बनाएं जिसमें com.google.activity.segment
टाइप के पॉइंट शामिल हों. यहां दिए गए हर पॉइंट से, लगातार चलने वाले समय के अंतराल के बारे में पता चलता है. इस दौरान, उपयोगकर्ता ने किसी एक तरह की गतिविधि की.
पिछली बार की गई दौड़ने और पैदल चलने के उदाहरण के लिए तीन गतिविधि सेगमेंट की ज़रूरत होगी: पहला, पहले 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();
सेशन का इस्तेमाल करके फ़िटनेस का डेटा पढ़ें
सेशन एपीआई की मदद से आप फ़िटनेस स्टोर से उन सेशन की सूची पा सकते हैं जो कुछ शर्तों से मेल खाते हैं. उदाहरण के लिए, आप किसी समय अंतराल के सभी सेशन हासिल कर सकते हैं या नाम या आईडी के हिसाब से कोई खास सेशन पा सकते हैं. आप यह भी लिख सकते हैं कि आप अपने ऐप्लिकेशन के ज़रिए बनाए गए सेशन में दिलचस्पी रखते हैं या किसी ऐप्लिकेशन के ज़रिए.
कुछ शर्तों से मेल खाने वाले सेशन की सूची पाने के लिए, पहले
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));
सेशन का इस्तेमाल करके नींद से जुड़ा डेटा पढ़ें
नींद के सेशन को, गतिविधि के अन्य सेशन से अलग माना जाता है. डिफ़ॉल्ट रूप से, पढ़ने के लिए दिए गए जवाबों में सिर्फ़ गतिविधि वाले सेशन होते हैं, नींद के सेशन नहीं.
नींद के सेशन शामिल करने के लिए, SessionReadRequest
बनाते समय includeSleepSessions
तरीके का इस्तेमाल करें. गतिविधियों और सेशन, दोनों को शामिल करने के लिए, includeSleepSessions
और includeActivitySessions
, दोनों का इस्तेमाल करें.
दूसरे ऐप्लिकेशन में सेशन दिखाएं
उपयोगकर्ताओं को किसी दूसरे ऐप्लिकेशन में किसी खास सेशन की ज़्यादा जानकारी देखने के लिए, आपका ऐप्लिकेशन ऐसा इंटेंट शुरू कर सकता है जिसमें सेशन की जानकारी हो. आप किसी खास ऐप्लिकेशन की जानकारी दे सकते हैं, जैसे कि वह ऐप्लिकेशन जिसने सेशन बनाया. या अगर सेशन बनाने वाला ऐप्लिकेशन डिवाइस पर इंस्टॉल नहीं किया गया है, तो आप किसी भी ऐसे ऐप्लिकेशन को अनुमति दे सकते हैं जो फ़िटनेस से जुड़ी गतिविधि दिखा सकता है.
किसी दूसरे ऐप्लिकेशन पर सेशन का डेटा दिखाने के मकसद से, 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-filter>
<action android:name="vnd.google.fitness.VIEW"/>
<data android:mimeType="vnd.google.fitness.session/running"/>
</intent-filter>
Google Fit से आपके ऐप्लिकेशन को मिलने वाला हर इंटेंट, सिर्फ़ एक गतिविधि के लिए होता है. हालांकि, एक ही इंटेंट फ़िल्टर में, कई तरह के MIME टाइप फ़िल्टर किए जा सकते हैं. आपके ऐप्लिकेशन के इंटेंट फ़िल्टर में, ऐसी सभी गतिविधियां शामिल होनी चाहिए जो आपके ऐप्लिकेशन पर काम करती हैं.
फ़िटनेस इंटेंट में ये अतिरिक्त शामिल हैं:
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()); } }