Bildirimden Etkinlik Başlatma

Bir bildirimden etkinlik başlattığınızda, kullanıcının beklenen gezinme deneyimini korumanız gerekir. Geri düğmesine dokunulduğunda kullanıcı uygulamanın normal iş akışına geri dönmelidir. Ayrıca, Son kullanılanlar ekranı açıldığında etkinlik ayrı bir görev olarak gösterilmelidir. Bu gezinme deneyimini korumak için etkinliği yeni bir görevde başlatın.

Bildiriminiz için dokunma davranışını ayarlamaya yönelik temel yaklaşım Temel bildirim oluşturma konusunda açıklanmıştır. Bu sayfada, yeni bir görev ve arka plan oluşturmak için bildiriminizin işlemi için nasıl PendingIntent ayarlanacağı açıklanmaktadır. Bunu nasıl yapacağınız, ne tür bir aktiviteye başladığınıza bağlıdır:

Düzenli aktivite
Bu, uygulamanızın normal kullanıcı deneyimi akışı kapsamında gerçekleşen bir etkinliktir. Kullanıcı, bildirimden etkinliğe ulaştığında, yeni görevde eksiksiz bir arka yığın içermeli ve kullanıcının uygulama hiyerarşisinde yukarı gitmek için Geri düğmesine dokunmasına izin vermelidir.
Özel aktivite
Kullanıcı bu etkinliği yalnızca bildirimden başlatılmışsa görür. Özetle, bu etkinlik bildirimin kendisinde görüntülenmesi zor bilgiler sağlayarak bildirim kullanıcı arayüzünü genişletir. Bu etkinliğin bir arka yığın olmasına gerek yoktur.

PendingIntent normal etkinliği ayarlayın

Bildiriminizden normal bir etkinlik başlatmak için PendingIntent öğesini, TaskStackBuilder kullanarak aşağıdaki gibi yeni bir arka grup oluşturacak şekilde ayarlayın.

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

Uygulama manifest dosyanızdaki her bir <activity> öğesine android:parentActivityName özelliğini ekleyerek etkinliklerinizin doğal hiyerarşisini tanımlayın. 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>

Geri yığınla PendingIntent derleme

Arka plandaki etkinlikler içeren bir etkinlik başlatmak istiyorsanız TaskStackBuilder örneği oluşturun ve başlatmak istediğiniz etkinlik için Intent ileterek addNextIntentWithParentStack() yöntemini çağırın.

Daha önce açıklandığı gibi her etkinlik için üst etkinliği tanımladığınız sürece, arka yığının tamamını içeren bir PendingIntent almak için getPendingIntent() yöntemini çağırabilirsiniz.

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 TaskStackBuilder.editIntentAt() yöntemini çağırarak yığındaki Intent nesnelerine bağımsız değişkenler ekleyebilirsiniz. Bu bazen, arka yığındaki bir etkinliğin kullanıcı söz konusu etkinliğe gittiğinde anlamlı veriler görüntülemesini sağlamak için gereklidir.

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 özel etkinliği ayarlama

Bildirimden başlayan özel bir etkinlik için arka yığın gerekli olmadığından getActivity() yöntemini çağırarak PendingIntent oluşturabilirsiniz. Ancak, manifest dosyasında uygun görev seçeneklerini tanımlayın.

  1. Manifest'inizde <activity> öğesine aşağıdaki özellikleri ekleyin.
    android:taskAffinity=""
    Bu etkinliğin, uygulamanın varsayılan görevine girmemesi için kodda kullandığınız FLAG_ACTIVITY_NEW_TASK işaretiyle birlikte bu özelliği boş ayarlayın. Uygulamanın varsayılan yakın ilgi alanına sahip mevcut görevler etkilenmez.
    android:excludeFromRecents="true"
    Kullanıcının yanlışlıkla geri gidememesi için yeni görevi Son Öğeler ekranından hariç tutar.

    Bu, aşağıdaki örnekte gösterilmiştir:

    <activity
        android:name=".ResultActivity"
        android:launchMode="singleTask"
        android:taskAffinity=""
        android:excludeFromRecents="true">
    </activity>
    
  2. Bildirimi oluşturun ve yayınlayın:
    1. Activity başlatan bir Intent oluşturun.
    2. FLAG_ACTIVITY_NEW_TASK ve FLAG_ACTIVITY_CLEAR_TASK işaretleriyle setFlags() yöntemini çağırarak Activity öğesini yeni ve boş bir görevle başlayacak şekilde ayarlayın.
    3. getActivity() yöntemini çağırarak bir PendingIntent oluşturun.

    Bu, aşağıdaki örnekte gösterilmiştir:

    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 çalıştığı hakkında daha fazla bilgi için Görevler ve arka yığın bölümüne bakın.