微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为Xamarin Android应用程序构造通知

如何解决为Xamarin Android应用程序构造通知

我试图创建一个通知,该通知将在警报到期时通知用户,正在我的OnCreate方法调用通知代码,因此我希望在启动Activity时看到该通知,但是这里的代码似乎有问题,没有任何帮助获得应用程序通知将不胜感激... 这就是我到目前为止所得到的

 class SecondActivity : AppCompatActivity
    {
    static readonly int mid = 1000;
        static readonly string CHANNEL_ID = "location_notification";
          protected override void OnCreate(Bundle onSavedInstanceState){
      //Notification code
              NotificationChannel channel = null;
            Intent intent=new Intent(this,typeof(SecondActivity));
            //Construct TaskStack builder for pending intent
            Android.App.TaskStackBuilder taskStackBuilder = Android.App.TaskStackBuilder.Create(this);
            //Add intent to backstack
            taskStackBuilder.AddNextIntentWithParentStack(intent);
            //Construct pending intent to open desired activity 
            PendingIntent pendingIntent = taskStackBuilder.GetPendingIntent(0,PendingIntentFlags.UpdateCurrent);
           //Enque notification to inform the user that the alarm has matured
            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
            .SetSmallIcon(Resource.Drawable.abc_tab_indicator_mtrl_alpha)
            .SetContentTitle("Alarm")
              .SetContentIntent(pendingIntent);
               .SetContentText("Alarm Time has matured");
              notificationmanager notificationmanager = 
              (notificationmanager)GetSystemService(Context.NotificationService);
            notificationmanager.Notify(mid,mBuilder.Build());
            channel = notificationmanager.GetNotificationChannel(channelName);
            notificationmanager.CreateNotificationChannel(channel);         
      }
}

我在做什么错了,谢谢

解决方法

在我的OnCreate方法中调用通知代码

您无法直接通过OnCreate方法调用通知。通常,我们将使用按钮单击事件或另一个单独的任务事件来调用通知。

第二,正如SushiHangover所说的,您需要在发布之前创建CreateNotificationChannel 本地通知。

您可以参考Notification channels添加通知渠道:

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 channelName = Resources.GetString(Resource.String.channel_name);
    var channelDescription = GetString(Resource.String.channel_description);
    var channel = new NotificationChannel(CHANNEL_ID,channelName,NotificationImportance.Default)
                  {
                      Description = channelDescription
                  };

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

并发出通知:

// Instantiate the builder and set notification elements:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this,CHANNEL_ID)
    .SetContentTitle ("Sample Notification")
    .SetContentText ("Hello World! This is my first notification!")
    .SetSmallIcon (Resource.Drawable.ic_notification);

// Build the notification:
Notification notification = builder.Build();

// Get the notification manager:
NotificationManager notificationManager =
    GetSystemService (Context.NotificationService) as NotificationManager;

// Publish the notification:
const int notificationId = 0;
notificationManager.Notify (notificationId,notification);

注意:创建频道和发布通知时, CHANNEL_ID 应该相同。通常,我们将包名称用作通道ID。

完整的示例代码如下:

private void Button_Click(object sender,EventArgs e)
{
    // create notification channel
    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 channelName = "Notify user";
    var channelDescription = "first local notification";
    var channel = new NotificationChannel("com.companyname.appandroidlistview",NotificationImportance.Default)
    {
        Description = channelDescription
    };

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

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this,"com.companyname.appandroidlistview")
            .SetContentTitle("Sample Notification")
            .SetContentText("Hello World! This is my first notification!")
            .SetSmallIcon(Resource.Drawable.icon);

    // Build the notification:
    Notification notification = builder.Build();

    // Get the notification manager:
    NotificationManager notificationManager =
        GetSystemService(Context.NotificationService) as NotificationManager;

    // Publish the notification:
    const int notificationId = 0;
    notificationManager.Notify(notificationId,notification);
}
,

在通知生效之前,您需要做很多事情,Microsoft文档提供了一种非常简单的方法来实现此目的...

 class SecondActivity : AppCompatActivity
    {
     //Declare notification ID and Channel ID In your class so you can use them from any method
         static readonly int NOTIFICATION_ID = 1000;
        static readonly string CHANNEL_ID = "location_notification";
        protected override void OnCreate(Bundle savedInstanceState){

        
          }
       //Define the method you will use to call notification 
   }
      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);
        }
   //Use a button to send the notification to the operating system
private void notifier(object sender,EventArgs e){

            Intent intent=new Intent(this,typeof(SecondActivity));
            //Construct TaskStack builder for pending intent
            Android.App.TaskStackBuilder taskStackBuilder = Android.App.TaskStackBuilder.Create(this);
            //Add intent to backstack
            taskStackBuilder.AddNextIntentWithParentStack(intent);
            //Construct pending intent to open desired activity 
            PendingIntent pendingIntent = taskStackBuilder.GetPendingIntent(0,PendingIntentFlags.UpdateCurrent);
            //Enque notification to inform the user that the alarm has matured
            NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this,CHANNEL_ID)
           .SetSmallIcon(Resource.Drawable.abc_tab_indicator_mtrl_alpha)
            .SetContentTitle("Alarm")
            .SetContentText("Alarm Time has matured")
   
            .SetShowWhen(false).SetContentIntent(pendingIntent);
            NotificationManagerCompat notificationManager = NotificationManagerCompat.From(this);
            notificationManager.Notify(NOTIFICATION_ID,mBuilder.Build());
}
}
}

如果您按照此页面上的说明进行操作,则您的通知应该显示得没有那么麻烦 https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/notifications/local-notifications-walkthrough

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。