उपयोगकर्ता अक्सर अपने Android फ़ोन पर टास्क शुरू करते हैं. जैसे, किसी दस्तावेज़ की समीक्षा करना, मैसेज को प्राथमिकता के हिसाब से व्यवस्थित करना या अलग-अलग आइटम ब्राउज़ करना. इसके बाद, वे Googlebook पर स्विच करना चाहते हैं, क्योंकि इसमें बड़ी डिसप्ले, फ़िज़िकल कीबोर्ड, और मल्टी-विंडो वर्कस्पेस होता है.
Android 17 (एपीआई लेवल 37) और इसके बाद के वर्शन में, जारी रखें सुविधा उपलब्ध है. इसकी मदद से, Googlebook के टास्कबार पर ऐप्लिकेशन का आइकॉन (इसे सुझाव कहा जाता है) दिखता है. यह आइकॉन, उस गतिविधि के लिए होता है जिसे उपयोगकर्ता ने अपने आस-पास मौजूद फ़ोन पर चलाया था. उपयोगकर्ता, सिर्फ़ एक क्लिक करके Googlebook पर अपनी गतिविधि जारी रख सकते हैं.
क्रॉस-डिवाइस हैंडऑफ़ की सुविधा लागू करने से, आपका ऐप्लिकेशन गतिविधि के कॉन्टेक्स्ट को ट्रांसफ़र कर सकता है. इससे उपयोगकर्ता, अपने वर्कफ़्लो को फिर से शुरू कर सकता है. ऐसा, आपके अडैप्टिव Android ऐप्लिकेशन या डेस्कटॉप ब्राउज़र में किया जा सकता है. इसके लिए, उसे ठीक उसी जगह से शुरू करना होगा जहां उसने अपने फ़ोन पर छोड़ा था.
हैंडऑफ़ फ़्लो चुनें
क्रॉस-डिवाइस हैंडऑफ़ की सुविधा चालू करने से पहले, यह तय करें कि जब कोई उपयोगकर्ता Googlebook पर 'इस डिवाइस पर जारी रखें' सुझाव को चुनता है, तब आपके फ़ोन ऐप्लिकेशन में मौजूद हर गतिविधि कैसे खुलनी चाहिए:
| हैंडऑफ़ फ़्लो | Googlebook पर टारगेट करना | इनके लिए सर्वश्रेष्ठ: | Key API |
|---|---|---|---|
| ऐप्लिकेशन-टू-ऐप्लिकेशन हैंडऑफ़ | डेस्कटॉप विंडो में चल रहा नेटिव Android ऐप्लिकेशन | Google Play पर बड़ी स्क्रीन और डेस्कटॉप विंडो के लिए ऑप्टिमाइज़ किए गए ऐप्लिकेशन | HandoffActivityData.Builder |
| वेब फ़ॉलबैक के साथ ऐप्लिकेशन-टू-ऐप्लिकेशन हैंडऑफ़ | अगर नेटिव Android ऐप्लिकेशन इंस्टॉल है, तो वह खुलेगा. अगर इंस्टॉल नहीं है, तो डिफ़ॉल्ट डेस्कटॉप ब्राउज़र में यूआरएल खुलेगा | ऐसे ऐप्लिकेशन जिन्हें डेस्कटॉप विंडो पर बेहतर अनुभव देने के लिए ऑप्टिमाइज़ किया गया है. हालांकि, Googlebook पर ऐप्लिकेशन इंस्टॉल न होने पर, उन्हें ब्राउज़र फ़ॉलबैक की ज़रूरत होती है | setFallbackUri |
| सीधे तौर पर वेब पर रीडायरेक्ट करना | डिफ़ॉल्ट डेस्कटॉप ब्राउज़र में यूआरएल (या अगर Android ऐप्लिकेशन के लिंक के लिए कॉन्फ़िगर किया गया है, तो खास ऐप्लिकेशन से इंटरसेप्ट किया गया यूआरएल) | ऐसे वर्कफ़्लो जहां आपका वेब ऐप्लिकेशन, डेस्कटॉप पर मुख्य तौर पर इस्तेमाल किया जाता है | HandoffActivityData.createWebHandoff |
किसी गतिविधि के लिए हैंडऑफ़ की सुविधा चालू करना
'जारी रखें' सुविधा डिफ़ॉल्ट रूप से बंद होती है. इसे हर गतिविधि के हिसाब से कॉन्फ़िगर किया जाता है. फ़ोन पर ईमेल भेजने के लिए, यह तरीका अपनाएं:
- गतिविधि के हैंडऑफ़ के लिए ज़रूरी स्थिति लोड होने के बाद,
setHandoffEnabledको कॉल करें औरtrueपास करें. इस सुविधा को चालू करने के बाद, सिस्टम हैंडऑफ़ डेटा का अनुरोध कर सकता है. ऐसा तब किया जा सकता है, जब गतिविधि फ़ोरग्राउंड में हो या बैकग्राउंड में जा रही हो. - शून्य नहीं होने वाला
HandoffActivityDataऑब्जेक्ट दिखाने के लिए,onHandoffActivityDataRequestedको बदलें. गतिविधि के लिए हैंडऑफ़ की सुविधा चालू है या नहीं, यह देखने के लिए किसी भी समयisHandoffEnabledसे क्वेरी की जा सकती है.
import android.app.Activity
import android.app.HandoffActivityData
import android.app.HandoffActivityDataRequestInfo
import android.os.Bundle
import android.os.PersistableBundle
class DocumentEditorActivity : Activity() {
private var documentId: String = "doc_42"
private var scrollOffsetPx: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Enable handoff once the activity is ready to transfer state.
setHandoffEnabled(true, null)
}
override fun onHandoffActivityDataRequested(
handoffRequestInfo: HandoffActivityDataRequestInfo
): HandoffActivityData {
val extras = PersistableBundle().apply {
putString(EXTRA_DOCUMENT_ID, documentId)
putInt(EXTRA_SCROLL_OFFSET, scrollOffsetPx)
}
return HandoffActivityData.Builder(getComponentName())
.setExtras(extras)
.build()
}
companion object {
const val EXTRA_DOCUMENT_ID = "extra_document_id"
const val EXTRA_SCROLL_OFFSET = "extra_scroll_offset"
}
}
हैंडऑफ़ के लिए पैकेज की गतिविधि की स्थिति
सिस्टम, इन दो स्थितियों में onHandoffActivityDataRequested को कॉल करता है:
- फ़ोरग्राउंड हैंडऑफ़: गतिविधि फ़ोन पर फ़ोरग्राउंड में होती है. साथ ही, उपयोगकर्ता Googlebook के टास्कबार से हैंडऑफ़ शुरू करता है.
- बैकग्राउंड में गतिविधि कैप्चर करना: गतिविधि फ़ोन पर बैकग्राउंड में चली जाती है. साथ ही, सिस्टम हैंडऑफ़ पेलोड को कैश मेमोरी में सेव कर लेता है, ताकि अगर उपयोगकर्ता बाद में Googlebook पर सुझाव चुनता है, तो उसे इस्तेमाल किया जा सके.
देखें कि हैंडऑफ़ का अनुरोध चालू है या नहीं
isActiveRequest का इस्तेमाल करके, HandoffActivityDataRequestInfo की जांच करें. इससे, उपयोगकर्ता की ओर से शुरू किए गए हैंडऑफ़ और बैकग्राउंड में सेव किए गए हैंडऑफ़ के बीच अंतर किया जा सकता है:
- अगर
isActiveRequesttrueदिखाता है, तो इसका मतलब है कि उपयोगकर्ता ने गतिविधि दिखते समय, किसी दूसरे डिवाइस पर जारी रखने का अनुरोध किया है. - अगर
isActiveRequest,falseदिखाता है, तो इसका मतलब है कि सिस्टम, गतिविधि के रुकने पर स्थिति को कैश मेमोरी में सेव कर रहा है.
अगर आपको फ़ोन पर एक विज़ुअल इंडिकेटर दिखाना है, जिससे यह पुष्टि हो कि टास्क को Googlebook पर ट्रांसफ़र किया जा रहा है, तो यूज़र इंटरफ़ेस (यूआई) को एसिंक्रोनस तरीके से अपडेट करने के लिए शेड्यूल करें. इससे onHandoffActivityDataRequested तुरंत वापस आ जाएगा.
स्टेट एक्स्ट्रा और वेब फ़ॉलबैक अटैच करना
HandoffActivityData पेलोड में यह जानकारी शामिल होती है:
- टारगेट कॉम्पोनेंट (ऐप्लिकेशन से ऐप्लिकेशन में हैंडऑफ़ के लिए ज़रूरी है): पास करें
this.getComponentName()(गतिविधि काComponentName) याComponentName(this, TargetActivity::class.java)कोHandoffActivityData.Builder, ताकि यह तय किया जा सके कि Googlebook पर कौनसी गतिविधि लॉन्च होगी. - Extras (ज़रूरी नहीं):
PersistableBundleकोsetExtras()पर पास करें जिसमें आइडेंटिफ़ायर और यूज़र इंटरफ़ेस (यूआई) कोऑर्डिनेट शामिल हों. उदाहरण के लिए, खुले दस्तावेज़ के आईडी, ऐक्टिव टैब की या स्क्रोल की पोज़िशन. बंडल का साइज़ 50 केबी से कम होना चाहिए. - फ़ॉलबैक यूआरआई (ज़रूरी नहीं):
setFallbackUriको वेबUriपास करें, ताकि अगर आपका Android ऐप्लिकेशन इंस्टॉल न हो, तो Googlebook डिफ़ॉल्ट ब्राउज़र में टास्क खोल सके.
import android.app.Activity
import android.app.HandoffActivityData
import android.app.HandoffActivityDataRequestInfo
import android.app.HandoffActivityParams
import android.net.Uri
import android.os.Bundle
import android.os.PersistableBundle
class ArticleReaderActivity : Activity() {
private var articleId: String = "android-desktop-windowing"
private var readingProgressPercent: Int = 45
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHandoffEnabled(
true,
HandoffActivityParams.Builder()
.setAllowHandoffWithoutPackageInstalled(true)
.build()
)
}
override fun onHandoffActivityDataRequested(
handoffRequestInfo: HandoffActivityDataRequestInfo
): HandoffActivityData {
if (handoffRequestInfo.isActiveRequest()) {
window.decorView.post {
onHandoffStartedToSecondaryDevice()
}
}
val extras = PersistableBundle().apply {
putString(EXTRA_ARTICLE_ID, articleId)
putInt(EXTRA_READING_PROGRESS, readingProgressPercent)
}
val fallbackWebUri = Uri.Builder()
.scheme("https")
.authority("example.com")
.appendPath("articles")
.appendPath(articleId)
.appendQueryParameter("progress", readingProgressPercent.toString())
.build()
return HandoffActivityData.Builder(getComponentName())
.setExtras(extras)
.setFallbackUri(fallbackWebUri)
.build()
}
private fun onHandoffStartedToSecondaryDevice() {
// Save local drafts and update phone UI without blocking handoff.
}
companion object {
const val EXTRA_ARTICLE_ID = "extra_article_id"
const val EXTRA_READING_PROGRESS = "extra_reading_progress"
}
}
सीधे वेब पर रीडायरेक्ट करने की सुविधा कॉन्फ़िगर करना
अगर Googlebook पर आपका मुख्य डेस्कटॉप अनुभव, वेब ऐप्लिकेशन है, तो HandoffActivityData.Builder का इस्तेमाल करने के बजाय, setAllowHandoffWithoutPackageInstalled(true) के साथ HandoffActivityParams को setHandoffEnabled पर पास करें और HandoffActivityData.createWebHandoff को कॉल करें:
import android.app.Activity
import android.app.HandoffActivityData
import android.app.HandoffActivityDataRequestInfo
import android.app.HandoffActivityParams
import android.net.Uri
import android.os.Bundle
class WebDashboardActivity : Activity() {
private var projectId: String = "proj_901"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHandoffEnabled(
true,
HandoffActivityParams.Builder()
.setAllowHandoffWithoutPackageInstalled(true)
.build()
)
}
override fun onHandoffActivityDataRequested(
handoffRequestInfo: HandoffActivityDataRequestInfo
): HandoffActivityData {
val webUri = Uri.Builder()
.scheme("https")
.authority("app.example.com")
.appendPath("projects")
.appendPath(projectId)
.build()
return HandoffActivityData.createWebHandoff(webUri)
}
}
Googlebook पर स्थिति की जानकारी पाना और उसे वापस लाना
जब उपयोगकर्ता, Googlebook के टास्कबार में मौजूद 'इस पर जारी रखें' सुझाव को चुनता है, तो सिस्टम डेस्कटॉप विंडो में टारगेट ComponentName लॉन्च करता है. साथ ही, लॉन्च Intent में PersistableBundle एक्स्ट्रा अटैच करता है.
Googlebook पर, डेस्कटॉप विंडोविंग और मल्टी-पैन लेआउट का इस्तेमाल करके, हैंडऑफ़ की सुविधा को मैनेज करें:
- हैंडऑफ़ के अतिरिक्त डेटा को एक्सट्रैक्ट करना: गतिविधि को पाने के
onCreateऔरonNewIntent, दोनों तरीकों में, आने वालेIntentसे अतिरिक्त डेटा वापस पाएं.onNewIntentको मैनेज करने से यह पक्का किया जाता है कि अगर आपकी गतिविधि मेंsingleTopलॉन्च मोड का इस्तेमाल किया जाता है या उसे किसी मौजूदा डेस्कटॉप विंडो पर रूट किया जाता है, तो विंडो को हैंड-ऑफ़ किए गए आइटम के हिसाब से अपडेट किया जाता है. - मल्टी-पैन लेआउट के हिसाब से स्थिति को अडैप्ट करना: फ़ोन पर फ़ुल-स्क्रीन में दिखने वाली स्थिति, अक्सर Googlebook पर सूची की जानकारी या सपोर्टिंग-पैन लेआउट में चुने गए आइटम से मैप होती है. प्राइमरी लिस्ट और ज़्यादा जानकारी वाले पैनल, दोनों को भरें, ताकि डेस्कटॉप विंडो में पूरी जानकारी मौजूद हो.
- विंडो का साइज़ बदलने पर, वापस लाए गए सेशन की स्थिति को बनाए रखें: हैंड-ऑफ़ किए गए सेशन की स्थिति को Jetpack Compose में
ViewModel(SavedStateHandle) याrememberSaveableमें सेव करें, ताकि Googlebook पर विंडो का साइज़ बदलने पर, वापस लाए गए सेशन की स्थिति रीसेट न हो.
import android.app.Activity
import android.content.Intent
import android.os.Bundle
class DocumentEditorReceiverActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Restore from the handoff intent only on initial launch so subsequent
// desktop window configuration changes use saved instance state.
if (savedInstanceState == null) {
handleHandoffIntent(intent)
}
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
handleHandoffIntent(intent)
}
private fun handleHandoffIntent(incomingIntent: Intent?) {
val documentId = incomingIntent?.getStringExtra(EXTRA_DOCUMENT_ID)
?: return
val scrollOffsetPx = incomingIntent.getIntExtra(EXTRA_SCROLL_OFFSET, 0)
openDocumentInDesktopWorkspace(
documentId = documentId,
initialScrollOffsetPx = scrollOffsetPx
)
}
private fun openDocumentInDesktopWorkspace(
documentId: String,
initialScrollOffsetPx: Int
) {
// Load the document into the list-detail layout and restore scroll position.
}
companion object {
const val EXTRA_DOCUMENT_ID = "extra_document_id"
const val EXTRA_SCROLL_OFFSET = "extra_scroll_offset"
}
}
फ़ोन और Googlebook के बीच हैंडऑफ़ की सुविधा आज़माना
लागू करने की प्रोसेस की पूरी तरह से पुष्टि करने के लिए:
- दोनों डिवाइसों को तैयार करना
- अपने Android फ़ोन (Android 17 या इसके बाद के वर्शन पर चल रहा हो) और Googlebook (या डेस्कटॉप विंडोइंग मोड में चल रहे टेस्ट के लिए डिवाइस) पर एक ही Google खाते से साइन इन करें.
- ब्लूटूथ चालू करें और दोनों डिवाइसों को एक ही वाई-फ़ाई नेटवर्क से कनेक्ट करें.
- दोनों डिवाइसों पर, सेटिंग > कनेक्ट किए गए डिवाइस > कनेक्शन की सेटिंग > क्रॉस-डिवाइस की सेवाएं > गतिविधि जारी रखें खोलें. इसके बाद, सेटअप के निर्देशों का पालन करें और Tasks को चालू करें. एनवायरमेंट से जुड़ी सभी ज़रूरी शर्तें जानने के लिए, सेटअप और टेस्ट देखें.
- ऐप्लिकेशन इंस्टॉल करना
- ऐप्लिकेशन-टू-ऐप्लिकेशन हैंडऑफ़ के लिए, फ़ोन और Googlebook, दोनों पर अपना बिल्ड इंस्टॉल करें.
- वेब फ़ॉलबैक या सीधे वेब पर रीडायरेक्ट करने की सुविधा के लिए, अपने फ़ोन पर ऐप्लिकेशन इंस्टॉल करें. साथ ही, Googlebook पर ऐप्लिकेशन को अनइंस्टॉल रहने दें, ताकि यह पुष्टि की जा सके कि ब्राउज़र, उम्मीद के मुताबिक यूआरएल खोलता है.
- हैंडऑफ़ ट्रिगर करना
- फ़ोन पर, अपना ऐप्लिकेशन खोलें और उस गतिविधि पर जाएं जिससे हैंडऑफ़ की सुविधा चालू होती है. जैसे, ऐप्लिकेशन-टू-ऐप्लिकेशन हैंडऑफ़ के लिए
setHandoffEnabled(true, null)पर कॉल करना या Googlebook पर ऐप्लिकेशन अनइंस्टॉल होने परsetAllowHandoffWithoutPackageInstalled(true)के साथHandoffActivityParamsपास करना. - Googlebook पर, टास्कबार की दाईं ओर मौजूद ऐप्लिकेशन के आइकॉन को देखें. इस आइकॉन पर 'इस डिवाइस पर जारी रखें' बैज लगा होगा. इसे चुनें.
- फ़ोन पर, अपना ऐप्लिकेशन खोलें और उस गतिविधि पर जाएं जिससे हैंडऑफ़ की सुविधा चालू होती है. जैसे, ऐप्लिकेशन-टू-ऐप्लिकेशन हैंडऑफ़ के लिए
- डेस्कटॉप को वापस लाने की पुष्टि करना
- पुष्टि करें कि आपका ऐप्लिकेशन, फ़ोन पर जिस आइटम और स्क्रोल पोज़िशन पर खुला था उसी पर डेस्कटॉप विंडो (या ब्राउज़र टैब) में खुलता हो.
- Googlebook पर ऐप्लिकेशन विंडो का साइज़ बदलें. साथ ही, पुष्टि करें कि विंडो के साइज़ में बदलाव होने पर भी, वापस लाया गया कॉन्टेंट और चुना गया कॉन्टेंट बना रहे.
अन्य संसाधन
- Googlebook के लिए अडैप्टिव ऐप्लिकेशन बनाना
- 'जारी रखें' सुविधा के बारे में जानकारी
- क्रॉस-डिवाइस हैंडऑफ़ की सुविधा चालू करना और उसे पसंद के मुताबिक बनाना
- यूज़र इंटरफ़ेस (यूआई) की स्थितियां सेव करना