연습-Xamarin.Android에서 로컬 알림 사용Walkthrough - Using local notifications in Xamarin.Android

이 연습에는 Xamarin.Android 응용 프로그램에서 로컬 알림을 사용 하는 방법을 보여 줍니다. 만들기 및 로컬 알림을 게시의 기본 사항을 보여 줍니다. 사용자가 알림 영역에 알림이 두 번째 작업을 시작 합니다.This walkthrough demonstrates how to use local notifications in Xamarin.Android applications. It demonstrates the basics of creating and publishing a local notification. When the user clicks the notification in the notification area, it starts up a second Activity.

개요Overview

이 연습에서는 사용자 작업에 단추를 클릭할 때 알림이 발생 하는 Android 응용 프로그램을 만듭니다.In this walkthrough, we will create an Android application that raises a notification when the user clicks a button in an Activity. 사용자가 알림을 클릭 하면 사용자가 첫 번째 작업에서 단추를 클릭 한 횟수를 표시 하는 두 번째 작업을 시작 합니다.When the user clicks the notification, it launches a second Activity that displays the number of times the user had clicked the button in the first Activity.

다음 스크린샷은이 응용 프로그램의 몇 가지 예를 보여 줍니다.The following screenshots illustrate some examples of this application:

알림 사용 하 여 예제 스크린샷Example screenshots with notification

참고

이 가이드에 중점을 두고 합니다 NotificationCompat Api 에서 합니다 Android 지원 라이브러리합니다.This guide focuses on the NotificationCompat APIs from the Android support library. 이러한 Api는 역호환성 최대 Android 4.0 (API 수준 14).These APIs will ensure maximum backwards compatibility to Android 4.0 (API level 14).

프로젝트 만들기Creating the project

시작 하려면 만들겠습니다 사용 하 여 새 Android 프로젝트를 Android 앱 템플릿.To begin, let's create a new Android project using the Android App template. 이 프로젝트를 호출 해 보겠습니다 LocalNotifications합니다.Let's call this project LocalNotifications. (Xamarin.Android 프로젝트 만들기와 잘 모르는 경우 Hello, Android.)(If you are not familiar with creating Xamarin.Android projects, see Hello, Android.)

리소스 파일을 편집 values/Strings.xml 알림 채널을 만들 때 사용할 두 개의 추가 문자열 리소스 포함 되도록 합니다.Edit the resource file values/Strings.xml so that it contains two extra string resources that will be used when it is time to create the notification channel:

<?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 패키지 추가Add the Android.Support.V4 NuGet package

이 연습에서는 사용 NotificationCompat.Builder 빌드하는 로컬 알림.In this walkthrough, we are using NotificationCompat.Builder to build our local notification. 에 설명 된 대로 로컬 알림에 포함 되어야 합니다는 Android 지원 라이브러리 v4 사용 하려면 프로젝트의 NuGet NotificationCompat.Builder.As explained in Local Notifications, we must include the Android Support Library v4 NuGet in our project to use NotificationCompat.Builder.

다음으로, 편집할 MainActivity.cs 다음을 추가 합니다 using 문 있도록의 형식을 Android.Support.V4.App 코드에 사용할 수 있습니다:Next, let's edit MainActivity.cs and add the following using statement so that the types in Android.Support.V4.App are available to our code:

using Android.Support.V4.App;

또한 해야 좋을까요 사용 중인 컴파일러 하려면 선택을 취소 합니다 Android.Support.V4.App 버전이 TaskStackBuilder 대신 Android.App 버전입니다.Also, we must make it clear to the compiler that we are using the Android.Support.V4.App version of TaskStackBuilder rather than the Android.App version. 다음 추가 using 문을 한 모호함을 해결 합니다.Add the following using statement to resolve any ambiguity:

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

알림 채널을 만들려면Create the notification channel

다음으로, 하는 메서드를 추가 MainActivity 는 (필요한 경우) 알림 채널을 만듭니다.Next, add a method to MainActivity that will create a notification channel (if necessary):

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 이 새 메서드를 호출 하는 방법.Update the OnCreate method to call this new method:

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

    CreateNotificationChannel();
}

알림 ID를 정의 합니다.Define the notification ID

이 알림 및 알림 채널에 대 한 고유 ID를 해야 합니다.We will need a unique ID for our notification and notification channel. 편집할 MainActivity.cs 추가한 다음 정적 인스턴스 변수에 MainActivity 클래스:Let's edit MainActivity.cs and add the following static instance variable to the MainActivity class:

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

알림을 생성 하는 코드를 추가 합니다.Add code to generate the notification

다음으로, 단추에 대 한 새 이벤트 처리기를 생성 해야 Click 이벤트입니다.Next, we need to create a new event handler for the button Click event. 다음 메서드를 추가 MainActivity:Add the following method to MainActivity:

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 메서드의 호출 알림 채널을 만들고 할당 해야 합니다.는 ButtonOnClick 메서드를는 Click (대체 템플릿에서 제공 하는 대리자 이벤트 처리기) 단추의 이벤트:The OnCreate method of MainActivity must make the call to create the notification channel and assign the ButtonOnClick method to the Click event of the button (replace the delegate event handler provided by the template):

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;
}

두 번째 작업 만들기Create a second activity

이제이 알림을 클릭 하는 경우 Android를 표시 하는 다른 활동을 작성 해야 합니다.Now we need to create another activity that Android will display when the user clicks our notification. 이라는 프로젝트에 다른 Android 활동 추가 SecondActivity합니다.Add another Android Activity to your project called SecondActivity. 오픈 SecondActivity.cs 해당 내용을이 코드로 바꿉니다.Open SecondActivity.cs and replace its contents with this code:

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합니다.We must also create a resource layout for SecondActivity. Android 레이아웃 파일을 프로젝트 호출 Second.axml합니다.Add a new Android Layout file to your project called Second.axml. 편집할 Second.axml 다음 레이아웃 코드에 붙여 넣습니다.Edit Second.axml and paste in the following layout code:

<?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>

알림 아이콘 추가Add a notification icon

마지막으로 알림을 시작 되 면 알림 영역에 나타나는 작은 아이콘을 추가 합니다.Finally, add a small icon that will appear in the notification area when the notification is launched. 복사할 수 있습니다 이 아이콘 프로젝트를 만들거나 사용자 고유의 사용자 지정 아이콘입니다.You can copy this icon to your project or create your own custom icon. 아이콘 파일 이름을 ic_stat_단추_click.png 복사 합니다 리소스/drawable 폴더입니다.Name the icon file ic_stat_button_click.png and copy it to the Resources/drawable folder. 사용 하 여 추가 > 기존 항목... 프로젝트에서이 아이콘 파일을 포함 하도록 합니다.Remember to use Add > Existing Item ... to include this icon file in your project.

애플리케이션 실행Run the application

애플리케이션을 빌드 및 실행합니다.Build and run the application. 다음 스크린샷과 유사 하 게 첫 번째 활동을 사용 하 여 표시 합니다.You should be presented with the first activity, similar to the following screenshot:

첫 번째 활동 스크린 샷First activity screenshot

단추를 클릭 하면 알림에 대 한 작은 아이콘에 알림 영역에 나타나는지 유의 해야 합니다.As you click the button, you should notice that the small icon for the notification appears in the notification area:

알림 아이콘 표시Notification icon appears

아래로 살짝 알림 서랍을 노출 하는 경우 알림이 표시 됩니다.If you swipe down and expose the notification drawer, you should see the notification:

알림 메시지Notification message

알림을 클릭 하면, 사라져야 합니다 및 다른 작업을 시작 해야 하는 경우 – 다음 스크린샷과 같이 어느 정도 확인 합니다.When you click the notification, it should disappear, and our other activity should be launched – looking somewhat like the following screenshot:

두 번째 활동 스크린 샷Second activity screenshot

지금까지Congratulations! 이 시점에서 Android 로컬 알림 연습 완료 하 고를 참조할 수 있는 작업 예제를 사용 합니다.At this point you have completed the Android local notification walkthrough and you have a working sample that you can refer to. 알림을 자세히 여기에서 설명 했습니다 보다 자세한 정보가 필요한 경우 걸리는 살펴보겠습니다 많이 알림에 대 한 Google 설명서합니다.There is a lot more to notifications than we have shown here, so if you want more information, take a look at Google's documentation on notifications.

요약Summary

사용 되는이 연습에서는 NotificationCompat.Builder 만들고 알림을 표시 합니다.This walkthrough used NotificationCompat.Builder to create and display notifications. 알림 사용 하 여 사용자 상호 작용에 응답 하는 방법으로 두 번째 작업을 시작 하는 방법의 기본 예제에 알아보았습니다 및 두 번째 활동 데이터를 전송에서 첫 번째 작업을 보여 줍니다.It showed a basic example of how to start up a second Activity as a way to respond to user interaction with the notification, and it demonstrated the transfer of data from the first Activity to the second Activity.