Bir etkinliği bildirimden 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ışında geri giderek ana ekrana yönlendirilmelidir. Son Kullanılanlar ekranı açıldığında ise 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ı ayarlamayla ilgili temel yaklaşım Temel bildirim oluşturma bölümünde açıklanmıştır. Bu sayfada, bildirimin işlemi için nasıl bir PendingIntent ayarlayacağınız açıklanmaktadır. Bu sayede, yeni bir görev ve geri yığın oluşturulur. Bu işlemi nasıl yapacağınız, başlatmakta olduğunuz etkinliğin türüne bağlıdır:
- Normal etkinlik: Bu, uygulamanızın normal kullanıcı deneyimi akışının bir parçası olarak var olan bir etkinliktir. Kullanıcı, bildirimden etkinliğe geldiğinde yeni görev, tam bir geri yığını içermelidir. Bu sayede kullanıcı, Geri düğmesine dokunarak uygulama hiyerarşisinde yukarı doğru gidebilir.
- Özel etkinlik: Kullanıcı bu etkinliği yalnızca bir bildirimden başlatılırsa görür. Bu etkinlik, bildirimin kendisinde gösterilmesi zor olan bilgileri sağlayarak bildirim kullanıcı arayüzünü genişletir. Bu etkinlik için geri yığın gerekmez.
Normal bir etkinlik PendingIntent'i ayarlama
Bildiriminizden normal bir etkinlik başlatmak için PendingIntent'ı TaskStackBuilder kullanarak aşağıdaki gibi yeni bir geri yığın oluşturacak şekilde ayarlayın.
Uygulamanızın etkinlik hiyerarşisini tanımlama
Uygulama manifest dosyanızdaki her <activity> öğesine android:parentActivityName özelliğini ekleyerek aktiviteleriniz için doğal hiyerarşiyi 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ığınıyla PendingIntent oluşturma
Etkinliklerin geri yığını içeren bir etkinlik başlatmak için TaskStackBuilder örneği oluşturun ve başlatmak istediğiniz etkinliğin Intent değerini ileterek addNextIntentWithParentStack() işlevini çağırın.
Her etkinlik için üst etkinliği daha önce açıklandığı şekilde tanımladığınız sürece, tüm geri yığını içeren bir PendingIntent almak için getPendingIntent() işlevini çağırabilirsiniz.
// 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 ) }
Gerekirse TaskStackBuilder.editIntentAt() işlevini çağırarak yığındaki Intent nesnelerine bağımsız değişkenler ekleyebilirsiniz. Bu, bazen kullanıcının geri yığında bir etkinliğe gittiğinde anlamlı verilerin gösterilmesini sağlamak için gereklidir.
Ardından PendingIntent değerini her zamanki gibi bildirime iletebilirsiniz:
val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply { setContentIntent(resultPendingIntent) // ... } with(NotificationManagerCompat.from(this)) { notify(NOTIFICATION_ID, builder.build()) }
Özel etkinlik PendingIntent'i oluşturma
Bildirimden başlatılan özel bir etkinlik için geri yığın gerekmediğinden getActivity() çağırarak PendingIntent oluşturabilirsiniz.
Ancak manifestte uygun görev seçeneklerini tanımlayın.
Manifest dosyanızda
<activity>öğesine aşağıdaki özellikleri ekleyin.android:taskAffinity=""- Kodda kullandığınız
FLAG_ACTIVITY_NEW_TASKişaretiyle birlikte bu etkinliğin uygulamanın varsayılan görevine gitmemesini sağlamak için bu özelliği boş bırakın. Uygulamanın varsayılan yakınlığına sahip mevcut görevler etkilenmez. android:excludeFromRecents="true"- Yeni görevi Son Kullanılanlar ekranından çıkarır. Böylece kullanıcı, yanlışlıkla bu ekrana geri dönemez.
Bu durum aşağıdaki örnekte gösterilmektedir:
<activity android:name=".ResultActivity" android:launchMode="singleTask" android:taskAffinity="" android:excludeFromRecents="true"> </activity>
Bildirimi oluşturun ve yayınlayın:
Activity'ı başlatan birIntentoluşturun.ActivityöğesiniFLAG_ACTIVITY_NEW_TASKveFLAG_ACTIVITY_CLEAR_TASKişaretleriylesetFlags()'ı çağırarak yeni ve boş bir görevde başlayacak şekilde ayarlayın.PendingIntentoluşturmak içingetActivity()numaralı telefonu arayın.
Bu durum aşağıdaki örnekte gösterilmektedir:
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 )
PendingIntentdeğerini her zamanki gibi bildirime iletin:val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply { setContentIntent(notifyPendingIntent) // ... } with(NotificationManagerCompat.from(this)) { notify(NOTIFICATION_ID, builder.build()) }
Çeşitli görev seçenekleri ve geri yığın hakkında daha fazla bilgi için Görevler ve geri yığın başlıklı makaleyi inceleyin.