सूचना से गतिविधि शुरू करना

जब आप किसी सूचना से गतिविधि शुरू करते हैं, तो आपको उपयोगकर्ता की नेविगेशन का बेहतर अनुभव मिल सकता है. 'वापस जाएं' बटन पर टैप करने से, उपयोगकर्ता को वहां से वापस जाना होगा के सामान्य तरीके से होम स्क्रीन पर जाते हैं और 'हाल ही के' सेक्शन खोलते हैं स्क्रीन पर इस गतिविधि को एक अलग टास्क के तौर पर दिखाया जाना चाहिए. इस नेविगेशन को बनाए रखने के लिए अनुभव हो, तो गतिविधि को किसी नए टास्क से शुरू करें.

आपकी सूचना के लिए टैप व्यवहार सेट करने का बुनियादी तरीका इसमें बताया गया है बेसिक कॉन्फ़िगरेशन बनाना सूचना पर टैप करें. इस पेज में बताया गया है कि आपके लिए PendingIntent सूचना भेज दी जाएगी, ताकि इससे एक नया टास्क बन सके और वापस आ जाए स्टैक सेट करें. इसे कैसे किया जाता है यह इस बात पर निर्भर करता है कि किस तरह की गतिविधि शुरू की जा रही है:

नियमित गतिविधि
यह एक ऐसी गतिविधि है जो आपके ऐप्लिकेशन के सामान्य UX फ़्लो के हिस्से के तौर पर मौजूद होती है. टास्क कब शुरू होगा अगर कोई उपयोगकर्ता सूचना से गतिविधि में आता है, तो नए टास्क को पूरी बैक स्टैक शामिल होनी चाहिए. इससे उपयोगकर्ता को नेविगेट करने के लिए 'वापस जाएं' बटन पर टैप करने की सुविधा मिलती है को बेहतर बनाने के लिए किया जा सकता है.
खास गतिविधि
उपयोगकर्ता को यह गतिविधि सिर्फ़ तब दिखती है, जब इसे किसी सूचना से शुरू किया गया हो. में यह गतिविधि, सूचना के यूज़र इंटरफ़ेस (यूआई) को बढ़ाने के लिए यह जानकारी देती है कि उसे नोटिफ़िकेशन में प्रदर्शित करना कठिन हो. इस गतिविधि के लिए ज़रूरी नहीं है पिछली गतिविधियां.

रेगुलर गतिविधि PendingIntent सेट अप करें

अपनी सूचना से सामान्य गतिविधि शुरू करने के लिए, PendingIntent सेट अप करें TaskStackBuilder का इस्तेमाल किया जा रहा है ताकि यह इस तरह से नया बैक स्टैक बना सके.

अपने ऐप्लिकेशन की गतिविधि की हैरारकी तय करना

अपनी गतिविधियों का सामान्य क्रम तय करने के लिए android:parentActivityName हर <activity> की विशेषता एलिमेंट शामिल करने की ज़रूरत है. यह उदाहरण देखें:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<!-- MainActivity is the parent for ResultActivity. -->
<activity
    android:name=".ResultActivity"
    android:parentActivityName=".MainActivity" />
    ...
</activity>

बैक स्टैक की मदद से PendingIntent बनाएं

गतिविधियों की पिछली स्टैक वाली गतिविधि को शुरू करने के लिए, TaskStackBuilder और कॉल का इंस्टेंस addNextIntentWithParentStack(), पासवर्ड के लिए Intent को पास किया गतिविधि करें जिसे आपको शुरू करना है.

जब तक आप नीचे बताए गए अनुसार हर गतिविधि के लिए अभिभावक गतिविधि तय करते हैं पहले, आप कॉल कर सकते हैं getPendingIntent() ऐसा PendingIntent करने के लिए करें जिसमें पूरी बैक स्टैक शामिल हो.

Kotlin

// Create an Intent for the activity you want to start.
val resultIntent = Intent(this, ResultActivity::class.java)
// Create the TaskStackBuilder.
val resultPendingIntent: PendingIntent? = TaskStackBuilder.create(this).run {
    // Add the intent, which inflates the back stack.
    addNextIntentWithParentStack(resultIntent)
    // Get the PendingIntent containing the entire back stack.
    getPendingIntent(0,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
}

Java

// Create an Intent for the activity you want to start.
Intent resultIntent = new Intent(this, ResultActivity.class);
// Create the TaskStackBuilder and add the intent, which inflates the back
// stack.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addNextIntentWithParentStack(resultIntent);
// Get the PendingIntent containing the entire back stack.
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(0,
            PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);

ज़रूरी होने पर, स्टैक में मौजूद Intent ऑब्जेक्ट में आर्ग्युमेंट जोड़े जा सकते हैं. इसके लिए, आपको कॉल करना होगा TaskStackBuilder.editIntentAt(). पिछली गतिविधियों में किसी गतिविधि को पक्का करने के लिए कभी-कभी ऐसा करना ज़रूरी होता है जब उपयोगकर्ता इस पर जाता है, तो काम का डेटा दिखाता है.

इसके बाद, सामान्य तरीके से PendingIntent को सूचना में पास किया जा सकता है:

Kotlin

val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply {
    setContentIntent(resultPendingIntent)
    ...
}
with(NotificationManagerCompat.from(this)) {
    notify(NOTIFICATION_ID, builder.build())
}

Java

NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
builder.setContentIntent(resultPendingIntent);
...
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(NOTIFICATION_ID, builder.build());

कोई खास गतिविधि PendingIntent सेट अप करें

क्योंकि नोटिफ़िकेशन से शुरू होने वाली विशेष गतिविधि के लिए वापस जाने की ज़रूरत नहीं होती स्टैक करें, तो आप कॉल करके PendingIntent बना सकते हैं getActivity(). हालांकि, मेनिफ़ेस्ट में टास्क के सही विकल्प तय करें.

  1. अपने मेनिफ़ेस्ट में, ये एट्रिब्यूट जोड़ें <activity> एलिमेंट.
    android:taskAffinity=""
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इसके साथ जोड़ने पर FLAG_ACTIVITY_NEW_TASK फ़्लैग जिसे आप कोड में इस्तेमाल करते हैं, तो पक्का करने के लिए इस एट्रिब्यूट को खाली सेट करें गतिविधि की जानकारी, ऐप्लिकेशन के डिफ़ॉल्ट टास्क पर नहीं जाती. कोई भी ऐप्लिकेशन की डिफ़ॉल्ट अफ़िनिटी ऑडियंस (एक जैसी पसंद वाले दर्शक) वाले मौजूदा टास्क, प्रभावित.
    android:excludeFromRecents="true"
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है हाल ही की स्क्रीन से नए टास्क को बाहर रखता है, ताकि उपयोगकर्ता गलती से इस पर वापस नहीं जा सकता.

    यह नीचे दिए गए उदाहरण में दिखाया गया है:

    <activity
        android:name=".ResultActivity"
        android:launchMode="singleTask"
        android:taskAffinity=""
        android:excludeFromRecents="true">
    </activity>
    
  2. सूचना बनाएं और जारी करें:
    1. एक ऐसा Intent बनाएं जो Activity.
    2. नए खाली टास्क को शुरू करने के लिए Activity को इतने समय तक सेट करें: कॉल किया जा रहा है setFlags() FLAG_ACTIVITY_NEW_TASK और फ़्लैग के साथ FLAG_ACTIVITY_CLEAR_TASK.
    3. कॉल करके PendingIntent बनाएं getActivity().

    यह नीचे दिए गए उदाहरण में दिखाया गया है:

    Kotlin

    val notifyIntent = Intent(this, ResultActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }
    val notifyPendingIntent = PendingIntent.getActivity(
            this, 0, notifyIntent,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    )
    

    Java

    Intent notifyIntent = new Intent(this, ResultActivity.class);
    // Set the Activity to start in a new, empty task.
    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    // Create the PendingIntent.
    PendingIntent notifyPendingIntent = PendingIntent.getActivity(
            this, 0, notifyIntent,
            PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE
    );
    
  3. हमेशा की तरह, सूचना के लिए PendingIntent को पास करें:

    Kotlin

    val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply {
        setContentIntent(notifyPendingIntent)
        ...
    }
    with(NotificationManagerCompat.from(this)) {
        notify(NOTIFICATION_ID, builder.build())
    }
    

    Java

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
    builder.setContentIntent(notifyPendingIntent);
    ...
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
    notificationManager.notify(NOTIFICATION_ID, builder.build());
    

टास्क के अलग-अलग विकल्पों और पिछली गतिविधियों के बारे में ज़्यादा जानकारी पाएं काम करता है, तो Tasks और पिछली गतिविधियां देखें.