पिछले पेज पर वापस जाने के जेस्चर का इस्तेमाल करने की सुविधा जोड़ें

पहली इमेज. फ़ोन पर पीछे जाने के लिए सुझाए गए जेस्चर का मॉकअप

Android 14 (एपीआई लेवल 34) में, पसंद के मुताबिक ऐनिमेशन बनाने के लिए, अतिरिक्त सिस्टम ऐनिमेशन और एपीआई की सुविधा जोड़ी गई है. ज़्यादा जानकारी के लिए, यह देखें पहले से मौजूद और कस्टम प्रेडिक्टिव बैक ऐनिमेशन के लिए सहायता जोड़ें.

उदाहरण के लिए, पीछे जाने के जेस्चर का इस्तेमाल करने से आपके ऐप्लिकेशन की होम स्क्रीन, जैसा कि पहली इमेज में दिए गए मॉकअप में दिखाया गया है. Android 13 और उसके बाद के वर्शन में, ये काम किए जा सकते हैं डेवलपर के लिए सेटिंग और टूल चालू करके, इस बैक-टू-होम ऐनिमेशन को टेस्ट करें (जैसा कि इस पेज पर बताया गया है).

अनुमानित बैक जेस्चर की सुविधा इस्तेमाल करने के लिए, आपको अपने ऐप्लिकेशन को अपडेट करना होगा. इसके लिए, OnBackPressedCallback AppCompat 1.6.0-alpha05 (AndroidX) या इसके बाद के वर्शन वाले एपीआई का इस्तेमाल करें. इसके अलावा, OnBackInvokedCallback प्लैटफ़ॉर्म एपीआई का इस्तेमाल भी किया जा सकता है. ज़्यादातर ऐप्लिकेशन, पुराने सिस्टम के साथ काम करने वाले AndroidX API का इस्तेमाल करेंगे.

यह अपडेट, पिछले नेविगेशन को ठीक से रोकने के लिए एक माइग्रेशन पाथ उपलब्ध कराता है. इसमें KeyEvent.KEYCODE_BACK के बैक इंटरसेप्शन को बदलना शामिल है और onBackPressed तरीकों वाली कोई भी क्लास, जैसे कि Activity और Dialog पर नए सिस्टम के वापस जाएं वाला एपीआई इस्तेमाल किया जा रहा है.

कोडलैब और Google I/O वीडियो

इस पेज पर इस दस्तावेज़ का इस्तेमाल करने के अलावा, हमारी कोडलैब की सुविधा आज़माएं. यह AndroidX Activity API का इस्तेमाल करके, अनुमानित बैक जेस्चर को मैनेज करने वाले वेबव्यू के इस्तेमाल के सामान्य उदाहरण को लागू करता है.

आप हमारा Google I/O वीडियो भी देख सकते हैं, जिसमें AndroidX और प्लैटफ़ॉर्म एपीआई लागू करना.

वापस जाने के डिफ़ॉल्ट नेविगेशन का इस्तेमाल करने वाले ऐप्लिकेशन को अपडेट करें

अगर आपका ऐप्लिकेशन नहीं करता है, तो इस सुविधा के साथ काम करने के लिए, अपने ऐप्लिकेशन को आसानी से अपडेट किया जा सकता है कोई भी कस्टम बैक व्यवहार लागू करें (दूसरे शब्दों में, यह बैक अप हैंडलिंग को ही छोड़ देता है) सिस्टम में जोड़ी जाती है). यहां बताए गए तरीके से, इस सुविधा के लिए ऑप्ट-इन करें पढ़ें.

अगर आपका ऐप्लिकेशन फ़्रैगमेंट या नेविगेशन कॉम्पोनेंट का इस्तेमाल करता है, तो इसमें भी अपग्रेड करें: AndroidX गतिविधि 1.6.0-alpha05 या उससे ज़्यादा.

कस्टम बैक नेविगेशन का इस्तेमाल करने वाले ऐप्लिकेशन को अपडेट करें

अगर आपका ऐप्लिकेशन, कस्टम बैक बिहेवियर लागू करता है, तो माइग्रेशन के अलग-अलग पाथ उपलब्ध हैं इस पर निर्भर करता है कि वह AndroidX का इस्तेमाल करता है या नहीं और वापस नेविगेशन को कैसे मैनेज करता है.

आपका ऐप्लिकेशन AndroidX का इस्तेमाल करता है आपका ऐप्लिकेशन, पिछले पेज पर जाने के बारे में जानकारी को कैसे मैनेज करता है माइग्रेट करने का सुझाया गया पाथ (इस पेज पर लिंक)
हां AndroidX API AndroidX के मौजूदा वर्शन को माइग्रेट करना
काम न करने वाले प्लैटफ़ॉर्म एपीआई काम न करने वाले बैक नेविगेशन एपीआई वाले AndroidX ऐप्लिकेशन को AndroidX APIs पर माइग्रेट करना
नहीं काम न करने वाले प्लैटफ़ॉर्म एपीआई, माइग्रेट किए जा सकते हैं ऐसे ऐप्लिकेशन को माइग्रेट करना जो काम न करने वाले बैक नेविगेशन एपीआई का इस्तेमाल प्लैटफ़ॉर्म एपीआई पर करता है
ऐसे प्लैटफ़ॉर्म के एपीआई जो काम नहीं करते, लेकिन माइग्रेट नहीं हो पा रहे जब तक यह ज़रूरी सुविधा नहीं बन जाती, तब तक ऑप्ट-इन को टाल दें

AndroidX के पिछले नेविगेशन को माइग्रेट करना

इस इस्तेमाल के उदाहरण का सबसे ज़्यादा इस्तेमाल किया जाता है. साथ ही, इसका सबसे ज़्यादा सुझाव दिया जाता है. यह नए या मौजूदा ऐप्लिकेशन जो मैन्युअल तरीके से हाथ के जेस्चर वाले नेविगेशन को मैनेज करते हैं OnBackPressedDispatcher, जैसा कि इसमें बताया गया है बैक नेविगेशन की सुविधा दें.

अगर आपका ऐप्लिकेशन इस कैटगरी में आता है, तो पीछे जाने के लिए अनुमानित जेस्चर:

  1. यह पक्का करने के लिए कि जो एपीआई पहले से ही OnBackPressedDispatcher एपीआई का इस्तेमाल कर रहे हैं (जैसे फ़्रैगमेंट और नेविगेशन कॉम्पोनेंट) इनके साथ बिना किसी रुकावट के काम करते हैं: पीछे जाने के लिए अनुमानित जेस्चर, अपग्रेड करें AndroidX गतिविधि 1.6.0-alpha05.

    // In your build.gradle file:
    dependencies {
    
    // Add this in addition to your other dependencies
    implementation "androidx.activity:activity:1.6.0-alpha05"
    
  2. पीछे जाने के अनुमानित जेस्चर के लिए ऑप्ट-इन करें. इसके बारे में यहां बताया गया है इस पेज पर जाएं.

काम न करने वाले बैक नेविगेशन एपीआई वाले AndroidX ऐप्लिकेशन को AndroidX APIs में माइग्रेट करें

अगर आपका ऐप्लिकेशन AndroidX लाइब्रेरी का इस्तेमाल करता है, लेकिन काम न करने वाले बैक नेविगेशन एपीआई के लिए, आपको AndroidX APIs पर माइग्रेट करना होगा नए व्यवहार का समर्थन करने के लिए.

काम न करने वाले एपीआई को AndroidX APIs पर माइग्रेट करने के लिए:

  1. अपने सिस्टम के बैक हैंडलिंग लॉजिक को AndroidX के OnBackPressedDispatcher पर माइग्रेट करें. इसके लिए, OnBackPressedCallback को लागू करें. ज़्यादा जानकारी के लिए, इसे देखें वापस जाने के लिए कस्टम नेविगेशन की सुविधा दें.

  2. जब आपको 'वापस जाएं' जेस्चर को इंटरसेप्ट करना बंद करना हो, तब OnBackPressedCallback को बंद करें.

  3. OnBackPressed के ज़रिए बैक इवेंट को इंटरसेप्ट करना बंद करें या KeyEvent.KEYCODE_BACK.

  4. अपनी सदस्यता को इसमें अपग्रेड करना न भूलें AndroidX गतिविधि 1.6.0-alpha05.

    // In your build.gradle file:
    dependencies {
    
    // Add this in addition to your other dependencies
    implementation "androidx.activity:activity:1.6.0-alpha05"
    
  5. अपने ऐप्लिकेशन को माइग्रेट करने के बाद, पीछे जाने के अनुमानित जेस्चर के लिए ऑप्ट-इन करें (जैसा कि यह पेज) पर क्लिक करें.

ऐसे ऐप्लिकेशन को प्लैटफ़ॉर्म एपीआई पर माइग्रेट करना जो बैक नेविगेशन के लिए काम न करने वाले एपीआई का इस्तेमाल करता है

अगर आपका ऐप्लिकेशन AndroidX लाइब्रेरी का इस्तेमाल नहीं कर सकता और इसके बजाय, काम न करने वाले एपीआई का इस्तेमाल करके, बैक नेविगेशन को लागू करता है या उसका रेफ़रंस देता है, तो आपको OnBackInvokedCallback प्लैटफ़ॉर्म एपीआई पर माइग्रेट करना होगा.

काम न करने वाले एपीआई को प्लैटफ़ॉर्म एपीआई पर माइग्रेट करने के लिए, यह तरीका अपनाएं:

  1. Android 13 वाले डिवाइसों पर नए OnBackInvokedCallback एपीआई का इस्तेमाल करें या साथ ही, ये Android 12 वर्शन वाले डिवाइसों पर काम न करने वाले एपीआई का इस्तेमाल करते हैं या कम.

  2. onBackInvokedDispatcher की मदद से, OnBackInvokedCallback में अपना कस्टम बैक लॉजिक रजिस्टर करें. यह मौजूदा गतिविधि को पूरा हो जाता है, तो आपके कॉलबैक को एक बार 'वापस जाएं' कार्रवाई पर प्रतिक्रिया देने का मौका मिलता है उपयोगकर्ता, सिस्टम पर वापस जाएं नेविगेशन को पूरा करता है.

  3. जब आप डिवाइस को इंटरसेप्ट करना बंद करने के लिए तैयार हों, तो OnBackInvokedCallback का रजिस्ट्रेशन रद्द करें पीछे जाने का जेस्चर. ऐसा न करने पर, हो सकता है कि सिस्टम पर वापस जाना—उदाहरण के लिए, "अटके रहना" और व्यू के बीच में उन्हें आपके ऐप्लिकेशन को ज़बरदस्ती बंद करने के लिए कहना.

    onBackPressed में से लॉजिक को माइग्रेट करने का तरीका, यहां दिए गए उदाहरण में बताया गया है:

    Kotlin

    @Override
    fun onCreate() {
        if (BuildCompat.isAtLeastT()) {
            onBackInvokedDispatcher.registerOnBackInvokedCallback(
                OnBackInvokedDispatcher.PRIORITY_DEFAULT
            ) {
                /**
                 * onBackPressed logic goes here. For instance:
                 * Prevents closing the app to go home screen when in the
                 * middle of entering data to a form
                 * or from accidentally leaving a fragment with a WebView in it
                 *
                 * Unregistering the callback to stop intercepting the back gesture:
                 * When the user transitions to the topmost screen (activity, fragment)
                 * in the BackStack, unregister the callback by using
                 * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback
                 * (https://developer.android.com/reference/kotlin/android/window/OnBackInvokedDispatcher#unregisteronbackinvokedcallback)
                 */
            }
        }
    }

    Java

    @Override
    void onCreate() {
      if (BuildCompat.isAtLeastT()) {
        getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
            OnBackInvokedDispatcher.PRIORITY_DEFAULT,
            () -> {
              /**
               * onBackPressed logic goes here - For instance:
               * Prevents closing the app to go home screen when in the
               * middle of entering data to a form
               * or from accidentally leaving a fragment with a WebView in it
               *
               * Unregistering the callback to stop intercepting the back gesture:
               * When the user transitions to the topmost screen (activity, fragment)
               * in the BackStack, unregister the callback by using
               * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback
               * (https://developer.android.com/reference/kotlin/android/view/OnBackInvokedDispatcher#unregisteronbackinvokedcallback)
               */
            }
        );
      }
    }
  4. OnBackPressed या KeyEvent.KEYCODE_BACK के ज़रिए, बैक इवेंट को इंटरसेप्ट करना बंद करें Android 13 और उसके बाद के वर्शन के लिए.

  5. अपने ऐप्लिकेशन को माइग्रेट करने के बाद, पीछे जाने के अनुमानित जेस्चर के लिए ऑप्ट-इन करें (जैसा कि इस पेज पर दिया गया है) ताकि OnBackInvokedCallback लागू हो.

आप OnBackInvokedCallback को PRIORITY_DEFAULT के साथ रजिस्टर कर सकते हैं या PRIORITY_OVERLAY, जो कि मिलते-जुलते AndroidX में उपलब्ध नहीं है OnBackPressedCallback. PRIORITY_OVERLAY के साथ कॉलबैक रजिस्टर करना कुछ मामलों में उपयोगी होती है. यह एक ऐसी स्थिति हो सकती है, जिसमें यह लागू हो सकता है कि जब आप माइग्रेट करें onKeyPreIme() से वापस जाने के लिए और आपके कॉलबैक को इसके बजाय पीछे जाने का जेस्चर पाने की ज़रूरत है पर भेज सकते हैं. IME खोलने पर PRIORITY_DEFAULT के साथ कॉलबैक रजिस्टर होते हैं. PRIORITY_OVERLAY के साथ अपना कॉलबैक रजिस्टर करें, ताकि यह पक्का किया जा सके कि OnBackInvokedDispatcher, खुले हुए IME के बजाय आपके कॉलबैक पर बैक जेस्चर भेजे.

पिछले पेज पर वापस जाने के जेस्चर के लिए ऑप्ट-इन करना

अपने मामले के आधार पर, ऐप्लिकेशन को अपडेट करने का तरीका तय करने के बाद, ऐप्लिकेशन में 'वापस जाने के लिए अनुमानित जेस्चर' की सुविधा के लिए ऑप्ट-इन करें.

ऑप्ट-इन करने के लिए, AndroidManifest.xml में <application> टैग में जाकर, android:enableOnBackInvokedCallback से true के लिए फ़्लैग किया गया.

<application
    ...
    android:enableOnBackInvokedCallback="true"
    ... >
...
</application>

अगर आपने कोई वैल्यू नहीं दी, तो डिफ़ॉल्ट रूप से false वैल्यू सेट हो जाती है. इसके बाद, ये काम किए जाते हैं:

  • इससे, पिछले जेस्चर का इस्तेमाल करने वाले सुझावों के सिस्टम के ऐनिमेशन को बंद किया जाता है.
  • OnBackInvokedCallback को अनदेखा करता है, लेकिन OnBackPressedCallback कॉल काम करना जारी रखते हैं.

गतिविधि के लेवल पर ऑप्ट-इन करना

Android 14 और इसके बाद के वर्शन में, android:enableOnBackInvokedCallback फ़्लैग की मदद से आपने गतिविधि के लेवल पर, सिस्टम के ऐनिमेशन के सुझावों के लिए ऑप्ट-इन किया हो. इस व्यवहार की वजह से, कई गतिविधियों वाले बड़े ऐप्लिकेशन को, अनुमानित वापसी जेस्चर पर माइग्रेट करना आसान हो जाता है.

नीचे दिया गया कोड, enableOnBackInvokedCallback का इस्तेमाल करने का एक उदाहरण दिखाता है. MainActivity से, बैक-टू-होम सिस्टम ऐनिमेशन को चालू करें:

<manifest ...>
    <application . . .

        android:enableOnBackInvokedCallback="false">

        <activity
            android:name=".MainActivity"
            android:enableOnBackInvokedCallback="true"
            ...
        </activity>
        <activity
            android:name=".SecondActivity"
            android:enableOnBackInvokedCallback="false"
            ...
        </activity>
    </application>
</manifest>

पिछले उदाहरण में, इसके लिए android:enableOnBackInvokedCallback=true सेट करना ".SecondActivity", क्रॉस-ऐक्टिविटी सिस्टम ऐनिमेशन को चालू करता है.

Google Ads API का इस्तेमाल करते समय इन बातों का ध्यान रखें: android:enableOnBackInvokedCallback फ़्लैग:

  • android:enableOnBackInvokedCallback=false को सेट करने पर, अनुमानित व्यू की सुविधा बंद हो जाती है गतिविधि के दौरान ऐनिमेशन या ऐप्लिकेशन के लेवल पर. यह इस बात पर निर्भर करता है कि आपने टैग कहां सेट किया है और निर्देश दिए हैं OnBackInvokedCallback प्लैटफ़ॉर्म एपीआई पर आने वाले कॉल को अनदेखा करने के लिए सिस्टम. हालांकि, OnBackPressedCallback को किए जाने वाले कॉल चलते रहेंगे, क्योंकि OnBackPressedCallback, पुराने सिस्टम के साथ काम करता है और onBackPressed को कॉल करता है एपीआई, जो Android 13 से पहले के वर्शन के साथ काम नहीं करता.
  • ऐप्लिकेशन के लेवल पर enableOnBackInvokedCallback फ़्लैग सेट करने पर, यह बन जाता है ऐप में सभी गतिविधियों के लिए डिफ़ॉल्ट मान. आप गतिविधि के स्तर पर फ़्लैग सेट करके हर गतिविधि के लिए डिफ़ॉल्ट सेटिंग, जैसा कि यहां दिखाया गया है ऊपर दिए गए कोड का उदाहरण.

कॉलबैक के सबसे सही तरीके

साथ काम करने वाले सिस्टम के बैक कॉलबैक इस्तेमाल करने के सबसे सही तरीके, यहां दिए गए हैं; BackHandler (लिखें की सुविधा के लिए), OnBackPressedCallback या OnBackInvokedCallback.

हर कॉलबैक को चालू और बंद करने वाली यूज़र इंटरफ़ेस (यूआई) स्थिति तय करें

यूज़र इंटरफ़ेस (यूआई) की स्थिति एक ऐसी प्रॉपर्टी है जो यूज़र इंटरफ़ेस (यूआई) की जानकारी देती है. हमारा सुझाव है कि आप ये ज़रूरी चरण अपनाएं.

  1. हर कॉलबैक को चालू और बंद करने वाली यूज़र इंटरफ़ेस (यूआई) स्थिति तय करें.

  2. ऑब्जेक्ट किए जा सकने वाले डेटा होल्डर का इस्तेमाल करके, स्थिति को तय करें टाइप, जैसे कि StateFlow या स्थिति लिखें और स्थिति बदलने पर कॉलबैक को चालू या बंद करें.

अगर आपका ऐप्लिकेशन पहले, शर्तों के साथ स्टेटमेंट के साथ बैक लॉजिक को जोड़ रहा था, इससे यह पता चलता है कि आप पिछले इवेंट पर प्रतिक्रिया दे रहे हैं, पहले से मौजूद है—ऐसा पैटर्न जिसे आपको नए कॉलबैक से बचना चाहिए. अगर हो सके, तो कॉलबैक को कंडिशनल स्टेटमेंट से बाहर ले जाएं और इसके बजाय कॉलबैक को मॉनिटर किए जा सकने वाले डेटा होल्डर टाइप से जोड़ें.

यूज़र इंटरफ़ेस (यूआई) लॉजिक के लिए, सिस्टम बैक कॉलबैक का इस्तेमाल करें

यूज़र इंटरफ़ेस (यूआई) लॉजिक इस यूज़र इंटरफ़ेस (यूआई) को दिखाने का तरीका बताता है. यूज़र इंटरफ़ेस (यूआई) लॉजिक को चलाने के लिए, सिस्टम बैक कॉलबैक का इस्तेमाल करें, जैसे कि पॉप-अप दिखाने या ऐनिमेशन चलाने के लिए किया जा सकता है.

अगर आपका ऐप्लिकेशन, सिस्टम के बैक कॉलबैक को चालू करता है, तो प्रिडिक्टिव ऐनिमेशन नहीं चलते और आपको बैक इवेंट को मैनेज करना होगा. सिर्फ़ बिना यूज़र इंटरफ़ेस (यूआई) चलाने के लिए कॉलबैक न बनाएं लॉजिक.

उदाहरण के लिए, अगर सिर्फ़ लॉग करने के लिए बैक इवेंट को इंटरसेप्ट किया जा रहा है, तो इसके बजाय, ऐक्टिविटी या फ़्रैगमेंट लाइफ़साइकल.

  • गतिविधि-से-गतिविधि मामलों या फ़्रैगमेंट-टू-गतिविधि मामलों के लिए, लॉग करें गतिविधि की लाइफ़साइकल में onDestroy में isFinishing, true है.
  • फ़्रैगमेंट-टू-फ़्रैगमेंट के मामलों के लिए, अगर onDestroy में isRemoving, फ़्रैगमेंट के व्यू लाइफ़साइकल में सही है, तो लॉग करें. इसके अलावा, FragmentManager.OnBackStackChangedListener में onBackStackChangeStarted या onBackStackChangeCommitted तरीकों का इस्तेमाल करके लॉग करें.

लिखें केस के लिए, ViewModel के onCleared() कॉलबैक में लॉग करें 'लिखें' डेस्टिनेशन से जुड़ा हुआ है. यह जानने का सबसे अच्छा तरीका है कि मैसेज लिखने के लिए चुना गया डेस्टिनेशन, बैक स्टैक से हटा दिया गया है और उसे मिटा दिया गया है.

सिर्फ़ एक रिस्पॉन्स वाले कॉलबैक बनाएं

ऐसा इसलिए मुमकिन है, क्योंकि आप डिस्पैचर में एक से ज़्यादा कॉलबैक जोड़ सकते हैं. कॉलबैक को उस स्टैक में जोड़ा जाता है जिसमें आखिरी बार चालू किया गया कॉलबैक जोड़ा गया था पीछे जाने के अगले जेस्चर को, हर पिछले जेस्चर के हिसाब से एक कॉलबैक के साथ हैंडल करता है.

पिछले जेस्चर के ऐनिमेशन की जांच करें

Android 13 के फ़ाइनल वर्शन में रिलीज़ होने वाली नई रिलीज़ के बाद, आपको डेवलपर के लिए, पहली इमेज में दिखाए गए बैक-टू-होम ऐनिमेशन की जांच करने के लिए उपलब्ध विकल्प.

इस ऐनिमेशन की जांच करने के लिए, नीचे दिया गया तरीका अपनाएं:

  1. अपने डिवाइस में, Settings > पर जाएं सिस्टम > डेवलपर के लिए सेटिंग और टूल.

  2. पूर्वानुमान के बैक ऐनिमेशन चुनें.

  3. अपडेट किया हुआ ऐप्लिकेशन लॉन्च करें और उसे इस्तेमाल करते हुए देखने के लिए, पीछे जाने वाले हाथ के जेस्चर का इस्तेमाल करें.