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.
-
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>
-
-
Bildirimi oluşturun ve yayınlayın:
-
Activity
başlatan birIntent
oluşturun. -
FLAG_ACTIVITY_NEW_TASK
veFLAG_ACTIVITY_CLEAR_TASK
işaretleriylesetFlags()
yöntemini çağırarakActivity
öğesini yeni ve boş bir görevle başlayacak şekilde ayarlayın. -
getActivity()
yöntemini çağırarak birPendingIntent
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 );
-
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.