Aracılığıyla paylaş


İzlenecek yol - Xamarin.Android'de yerel bildirimleri kullanma

Bu kılavuzda, Xamarin.Android uygulamalarında yerel bildirimlerin nasıl kullanılacağı gösterilmektedir. Yerel bildirim oluşturma ve yayımlamanın temellerini gösterir. Kullanıcı bildirim alanındaki bildirime tıkladığında ikinci bir Etkinlik başlatır.

Genel bakış

Bu kılavuzda, kullanıcı etkinlikteki bir düğmeye tıkladığında bildirim oluşturan bir Android uygulaması oluşturacağız. Kullanıcı bildirime tıkladığında, kullanıcının ilk Etkinlikteki düğmeye kaç kez tıkladığını gösteren ikinci bir Etkinlik başlatır.

Aşağıdaki ekran görüntüleri bu uygulamanın bazı örneklerini gösterir:

Bildirim içeren örnek ekran görüntüleri

Not

Bu kılavuz, Android destek kitaplığındaki NotificationCompat API'lerine odaklanır. Bu API'ler, Android 4.0'a (API düzeyi 14) en fazla geriye dönük uyumluluk sağlar.

Projeyi oluşturma

Başlamak için Android Uygulama şablonunu kullanarak yeni bir Android projesi oluşturalım. Şimdi bu projeyi LocalNotifications olarak adlandıralım. (Xamarin.Android projeleri oluşturmayı bilmiyorsanız bkz .Merhaba, Android.)

Kaynak dosya değerlerini/Strings.xml düzenleyerek bildirim kanalını oluşturma zamanı geldiğinde kullanılacak iki ek dize kaynağı içermesini sağlayın:

<?xml version="1.0" encoding="utf-8"?>

<resources>
  <string name="Hello">Hello World, Click Me!</string>
  <string name="ApplicationName">Notifications</string>

  <string name="channel_name">Local Notifications</string>
  <string name="channel_description">The count from MainActivity.</string>
</resources>

Android.Support.V4 NuGet paketini ekleme

Bu kılavuzda, yerel bildirimimizi oluşturmak için kullanıyoruz NotificationCompat.Builder . Yerel Bildirimler'de açıklandığı gibi, kullanmak NotificationCompat.Builderiçin projemize Android Destek Kitaplığı v4 NuGet'i eklemeliyiz.

Şimdi MainActivity.cs düzenleyelim ve içindeki türlerin Android.Support.V4.App kodumuzda kullanılabilmesi için aşağıdaki using deyimi ekleyelim:

using Android.Support.V4.App;

Ayrıca, derleyiciye sürümü yerine Android.App sürümünü TaskStackBuilder kullandığımızı Android.Support.V4.App açıkça belirtmeliyiz. Belirsizliği çözmek için aşağıdaki using deyimi ekleyin:

using TaskStackBuilder = Android.Support.V4.App.TaskStackBuilder;

Bildirim kanalını oluşturma

Ardından, bir bildirim kanalı oluşturacak bir yöntem MainActivity ekleyin (gerekirse):

void CreateNotificationChannel()
{
    if (Build.VERSION.SdkInt < BuildVersionCodes.O)
    {
        // Notification channels are new in API 26 (and not a part of the
        // support library). There is no need to create a notification
        // channel on older versions of Android.
        return;
    }

    var name = Resources.GetString(Resource.String.channel_name);
    var description = GetString(Resource.String.channel_description);
    var channel = new NotificationChannel(CHANNEL_ID, name, NotificationImportance.Default)
                  {
                      Description = description
                  };

    var notificationManager = (NotificationManager) GetSystemService(NotificationService);
    notificationManager.CreateNotificationChannel(channel);
}

OnCreate Bu yeni yöntemi çağırmak için yöntemini güncelleştirin:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SetContentView(Resource.Layout.Main);

    CreateNotificationChannel();
}

Bildirim kimliğini tanımlama

Bildirim ve bildirim kanalımız için benzersiz bir kimliğe ihtiyacımız olacak. şimdi MainActivity.cs düzenleyelim ve sınıfına aşağıdaki statik örnek değişkenini MainActivity ekleyelim:

static readonly int NOTIFICATION_ID = 1000;
static readonly string CHANNEL_ID = "location_notification";
internal static readonly string COUNT_KEY = "count";

Bildirimi oluşturmak için kod ekleme

Ardından, düğme Click olayı için yeni bir olay işleyicisi oluşturmamız gerekir. aşağıdaki yöntemi içine MainActivityekleyin:

void ButtonOnClick(object sender, EventArgs eventArgs)
{
    // Pass the current button press count value to the next activity:
    var valuesForActivity = new Bundle();
    valuesForActivity.PutInt(COUNT_KEY, count);

    // When the user clicks the notification, SecondActivity will start up.
    var resultIntent = new Intent(this, typeof(SecondActivity));

    // Pass some values to SecondActivity:
    resultIntent.PutExtras(valuesForActivity);

    // Construct a back stack for cross-task navigation:
    var stackBuilder = TaskStackBuilder.Create(this);
    stackBuilder.AddParentStack(Class.FromType(typeof(SecondActivity)));
    stackBuilder.AddNextIntent(resultIntent);

    // Create the PendingIntent with the back stack:
    var resultPendingIntent = stackBuilder.GetPendingIntent(0, (int) PendingIntentFlags.UpdateCurrent);

    // Build the notification:
    var builder = new NotificationCompat.Builder(this, CHANNEL_ID)
                  .SetAutoCancel(true) // Dismiss the notification from the notification area when the user clicks on it
                  .SetContentIntent(resultPendingIntent) // Start up this activity when the user clicks the intent.
                  .SetContentTitle("Button Clicked") // Set the title
                  .SetNumber(count) // Display the count in the Content Info
                  .SetSmallIcon(Resource.Drawable.ic_stat_button_click) // This is the icon to display
                  .SetContentText($"The button has been clicked {count} times."); // the message to display.

    // Finally, publish the notification:
    var notificationManager = NotificationManagerCompat.From(this);
    notificationManager.Notify(NOTIFICATION_ID, builder.Build());

    // Increment the button press count:
    count++;
}

OnCreate MainActivity yöntemi, bildirim kanalını oluşturmak ve yöntemini düğmenin olayına atamak ButtonOnClick için Click çağrı yapmalıdır (şablon tarafından sağlanan temsilci olay işleyicisini değiştirin):

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SetContentView(Resource.Layout.Main);

    CreateNotificationChannel();

    // Display the "Hello World, Click Me!" button and register its event handler:
    var button = FindViewById<Button>(Resource.Id.MyButton);
    button.Click += ButtonOnClick;
}

İkinci etkinlik oluşturma

Şimdi kullanıcı bildirimimize tıkladığında Android'in görüntüleneceği başka bir etkinlik oluşturmamız gerekiyor. Projenize SecondActivity adlı başka bir Android Etkinliği ekleyin. SecondActivity.cs açın ve içeriğini şu kodla değiştirin:

using System;
using Android.App;
using Android.OS;
using Android.Widget;

namespace LocalNotifications
{
    [Activity(Label = "Second Activity")]
    public class SecondActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Get the count value passed to us from MainActivity:
            var count = Intent.Extras.GetInt(MainActivity.COUNT_KEY, -1);

            // No count was passed? Then just return.
            if (count <= 0)
            {
                return;
            }

            // Display the count sent from the first activity:
            SetContentView(Resource.Layout.Second);
            var txtView = FindViewById<TextView>(Resource.Id.textView1);
            txtView.Text = $"You clicked the button {count} times in the previous activity.";
        }
    }
}

SecondActivity için de bir kaynak düzeni oluşturmalıyız. Projenize Second.axml adlı yeni bir Android Düzen dosyası ekleyin. Second.axml dosyasını düzenleyin ve aşağıdaki düzen kodunu yapıştırın:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <TextView
        android:text=""
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1" />
</LinearLayout>

Bildirim simgesi ekleme

Son olarak, bildirim başlatıldığında bildirim alanında görünecek küçük bir simge ekleyin. Bu simgeyi projenize kopyalayabilir veya kendi özel simgenizi oluşturabilirsiniz. Simge dosyasını ic_stat_button_click.png adlandırın ve Resources/drawable klasörüne kopyalayın. Bu simge dosyasını projenize eklemek için Var Olan Öğe Ekle > ... kullanmayı unutmayın.

Uygulamayı çalıştırma

Uygulamayı derleyin ve çalıştırın. Aşağıdaki ekran görüntüsüne benzer şekilde ilk etkinliğin size sunulması gerekir:

İlk etkinlik ekran görüntüsü

Düğmeye tıkladıktan sonra bildirim için küçük simgenin bildirim alanında gösterildiğini fark etmelisiniz:

Bildirim simgesi görünür

Aşağı doğru çekin ve bildirim çekmecesini kullanıma sunarsanız bildirimi görmeniz gerekir:

Bildirim iletisi

Bildirime tıkladığınızda bildirim kaybolmalıdır ve diğer etkinliğimiz şu ekran görüntüsüne benzer şekilde başlatılmalıdır:

İkinci etkinlik ekran görüntüsü

Tebrikler! Bu noktada Android yerel bildirim kılavuzunu tamamladınız ve başvurabileceğiniz bir çalışma örneğiniz var. Burada gösterilenden çok daha fazla bildirim var, bu nedenle daha fazla bilgi edinmek istiyorsanız Google'ın bildirimlerle ilgili belgelerine göz atın.

Özet

Bildirimleri oluşturmak ve görüntülemek için kullanılan NotificationCompat.Builder bu kılavuz. Bildirimle kullanıcı etkileşimini yanıtlamak için ikinci bir Etkinlik başlatmanın temel bir örneğini gösterdi ve ilk Etkinlikten ikinci Etkinliğe veri aktarımını gösterdi.