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.
-
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>
-
-
Bildirimi oluşturun ve gönderin:
-
Bir
Intent
oluşturActivity
. -
Activity
bölümünü şu tarihe kadar yeni, boş bir göreve başlayacak şekilde ayarlayın: aramasetFlags()
FLAG_ACTIVITY_NEW_TASK
veFLAG_ACTIVITY_CLEAR_TASK
. -
Ş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 );
-
Bir
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.