Bildirimden Etkinlik Başlatma

Bir bildirimden etkinlik başlattığınızda, kullanıcının beklenen navigasyon deneyimi. Geri düğmesine dokunulması kullanıcıyı geri götürmelidir ana ekrana götürebilir ve Son kullanılanlar'ı açabilirsiniz. ekranın, etkinliği ayrı bir görev olarak göstermesi gerekir. Bu gezinme menüsünü korumak için yeni bir görevde başlatmasını sağlamaktır.

Bildiriminiz için dokunma davranışını ayarlamayla ilgili temel yaklaşım şurada açıklanmıştır: Temel bildirimi gönderebilir. Bu sayfada, bir feed'in Sizin için PendingIntent yeni bir görev oluşturmak ve geri bildirim yığını'nı seçin. Bunu nasıl yapabilirsiniz? başlattığınız etkinliğin türüne bağlıdır:

Normal aktivite
Bu, uygulamanızın normal kullanıcı deneyimi akışının bir parçası olarak gerçekleşen bir etkinliktir. Zaman Kullanıcı etkinliğe bildirimden ulaştıysa yeni görevin eksiksiz bir arka yığını dahil ederek, kullanıcının gezinmek için Geri düğmesine yukarıya doğru inceleyebilirsiniz.
Özel etkinlik
Kullanıcı, bu etkinliği yalnızca etkinlik bir bildirimden başlatıldıysa görür. olduğunu düşünüyorsanız bu etkinlik, bildirimin kendisinde görüntülenmesi zordur. Bu etkinlik için gösterir.

Normal bir PendingIntent etkinliği ayarlama

Bildiriminizden düzenli bir etkinlik başlatmak için PendingIntent özelliğini ayarlayın TaskStackBuilder kullanılıyor aşağıdaki gibi yeni bir arka yığın oluşturacaktır.

Uygulamanızın Etkinlik hiyerarşisini tanımlama

Etkinliklerinizin doğal hiyerarşisini tanımlamak için android:parentActivityName özelliğini her bir <activity> ile ilişkilendirin öğesi oluşturun. Aşağıdaki örneğe bakın:

<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>

Arka yığına sahip PendingIntent derleme

Geriye dönük etkinlik yığını içeren bir etkinlik başlatmak için TaskStackBuilder ve çağrı örneği addNextIntentWithParentStack(), bunun için Intent etkinliği seçin.

Her etkinlik için ana etkinliği açıklandığı şekilde tanımladığınız sürece önce numarayı arayabilir, getPendingIntent() arkadaki yığının tamamını içeren bir PendingIntent almak için.

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);

Gerekirse yığındaki Intent nesneleri için bağımsız değişkenleri çağırarak TaskStackBuilder.editIntentAt() Bu bazen arka yığındaki bir etkinliğin Kullanıcı gezindiğinde anlamlı veriler görüntüler.

Ardından PendingIntent öğesini her zamanki gibi bildirime aktarabilirsiniz:

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'de özel bir etkinlik ayarlama

Bildirimden başlayan özel bir etkinlik için geri sayım gerekmez. öğesini çağırarak PendingIntent oluşturabilirsiniz. getActivity() Ancak uygun görev seçeneklerini manifest dosyasında tanımlayın.

  1. Manifest'inizde aşağıdaki özellikleri <activity> öğesi.
    android:taskAffinity=""
    . Şununla birleştirilen: FLAG_ACTIVITY_NEW_TASK kodda kullandığınız bayrağı göstermek istiyorsanız, bu özelliği boş bırakın. bu etkinlik, uygulamanın varsayılan görevine dahil edilmez. Herhangi biri uygulamanın varsayılan benzeşimine sahip mevcut görevler yardımcı olabilir.
    android:excludeFromRecents="true"
    . Yeni görevi Son Kullanılanlar ekranından hariç tutar. Böylece kullanıcı geri gitmesi mümkün olmayabilir.

    Bu, aşağıdaki örnekte gösterilmektedir:

    <activity
        android:name=".ResultActivity"
        android:launchMode="singleTask"
        android:taskAffinity=""
        android:excludeFromRecents="true">
    </activity>
    
  2. Bildirimi oluşturun ve gönderin:
    1. Bir Intent oluştur Activity.
    2. Activity bölümünü şu tarihe kadar yeni, boş bir göreve başlayacak şekilde ayarlayın: arama setFlags() FLAG_ACTIVITY_NEW_TASK ve FLAG_ACTIVITY_CLEAR_TASK.
    3. Şu numarayı arayarak bir PendingIntent oluşturun: getActivity().

    Bu, aşağıdaki örnekte gösterilmektedir:

    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 öğesini her zamanki gibi bildirime iletin:

    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());
    

Çeşitli görev seçenekleri ve arka yığının nasıl göründüğü hakkında daha fazla bilgi için Görevler ve arka grup başlıklı makaleyi inceleyin.