Xamarin.Androidで通知を表示しアプリを起動する

提供: MonoBook
ナビゲーションに移動 検索に移動

Xamarin.Androidで、通知を表示し、通知欄がタップされたらアプリを起動したい。

いわゆる「〇〇さんからメッセージが届きました」と表示されタップするとメッセンジャーが起動するアレを実装したい。

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

    using Android.Content;// Intent
    using Android.Support.V4.App; // Notification

    [Activity(Label = "NofiticationExample", MainLauncher = true, Icon = "@mipmap/icon")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button>(Resource.Id.myButton);

            button.Click += (s, e) => Notification();
        }

        void Notification()
        {
            var context = this;

            var manager = (NotificationManager)context.GetSystemService(Context.NotificationService);

            // アクティビティを起動するインテント
            // Flagsなどは用途に応じて適宜書き換える。
            var intent = context.PackageManager
                .GetLaunchIntentForPackage(context.PackageName)
                .AddFlags(ActivityFlags.ClearTop);

            // PendingIntentを噛ますことで、インテントを直ちに発行するのではなく、
            // 通知欄をタップされたタイミングで発行する
            var pendingIntent = PendingIntent.GetActivity(context, 0, intent, PendingIntentFlags.UpdateCurrent);

            // 通知を生成
            var message = "Hello, World!";
            var builder = new NotificationCompat.Builder(context)
                .SetSmallIcon(Android.Resource.Drawable.StarBigOn)
                .SetContentTitle("Boop!")
                .SetStyle(new NotificationCompat.BigTextStyle().BigText(message))
                .SetContentText(message)
                .SetContentIntent(pendingIntent);

            // 通知を発射
            manager.Notify(1, builder.Build());
        }
    }

関連項目[編集 | ソースを編集]