Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin Android应用程序的构造通知_Android_Xamarin_Notifications - Fatal编程技术网

Xamarin Android应用程序的构造通知

Xamarin Android应用程序的构造通知,android,xamarin,notifications,Android,Xamarin,Notifications,我正在尝试创建一个通知,当警报成熟时通知用户,我在OnCreate方法中调用通知代码,所以我希望在启动活动时看到它,但我的代码似乎有问题,如果能帮助应用程序通知,我们将不胜感激。。。 这是我到目前为止得到的 class SecondActivity : AppCompatActivity { static readonly int mid = 1000; static readonly string CHANNEL_ID = "location_not

我正在尝试创建一个通知,当警报成熟时通知用户,我在OnCreate方法中调用通知代码,所以我希望在启动活动时看到它,但我的代码似乎有问题,如果能帮助应用程序通知,我们将不胜感激。。。 这是我到目前为止得到的

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

我做错了什么?谢谢,在通知生效之前,您需要做很多事情,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());
}
}
}
class SecondActivity:AppCompatActivity
{
//在类中声明通知ID和通道ID,以便可以从任何方法使用它们
静态只读int通知_ID=1000;
静态只读字符串通道\u ID=“位置\u通知”;
创建时受保护的覆盖无效(Bundle savedInstanceState){
}
//定义将用于调用通知的方法
}
void createNotificationChannel()
{
if(Build.VERSION.SdkInt
如果您按照本页上的说明进行操作,那么您的通知应该会显示出来,不会有太多麻烦

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

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

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

您可以参考添加通知频道:

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);
}
注意:频道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", channelName, 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);
}
private void按钮\u单击(对象发送者,事件参数e)
{
//创建通知通道
if(Build.VERSION.SdkInt
您必须描述“问题”。你有错误吗?如果是,那是什么。你创建了通知频道吗?2.频道的优先级是什么?不,我没有,什么是通知频道?@Woj,它只是不像其他应用程序那样显示通知
NotificationChannel
示例:虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-嗨,如果你已经解决了这个问题!记得在你有时间的时候标记答案,这对其他遇到同样问题的人会有帮助。
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", channelName, 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);
}