Delphi专题 ·

Delphi C++移动教程:使用通知Notification(IOS和Android)

本教程描述了在移动设备上使用通知的基本步骤。

三个基本通知或报警样式

当用户在他们的移动设备上设置应用程序通知时,通知可以从这里显示的三种基本样式发送给应用程序。横幅简短显示,但警告对话框需要用户解除通知。

移动设备上的通知横幅

IOS

Delphi C++移动教程:使用通知Notification(IOS和Android) Delphi专题 第1张

 

Android

Delphi C++移动教程:使用通知Notification(IOS和Android) Delphi专题 第2张

警告对话框:IOS标记号和Android通知号

IOS标记号

Delphi C++移动教程:使用通知Notification(IOS和Android) Delphi专题 第3张

 

Android通知号

Delphi C++移动教程:使用通知Notification(IOS和Android) Delphi专题 第4张

 

移动设备通知中心

下面的图片显示了在iPad(Notification Center)和Android(notification drawer)上的通知中心,用户可以下拉所有最近通知的列表。

IOS

Delphi C++移动教程:使用通知Notification(IOS和Android) Delphi专题 第5张

 

Android

Delphi C++移动教程:使用通知Notification(IOS和Android) Delphi专题 第6张

 

访问通知服务

RAD Studio提供了TNotificationCenter控件让您轻松访问通知服务。
要访问通知服务,请执行以下操作:

  • 1、创建一个新的移动应用程序:
    • Delphi: File > New > Multi-Device Application
    • C++: File > New > Multi-Device Application
  • 2、选择工具面板Tool Palette中的TNotificationCenter组件,然后把它放在窗体设计器Form Designer上。
  • 检查以下单元已自动添加到项目中:
    • 对于Delphi应用程序,如果不存在,请将下列单元添加到Uses中:
      1. uses
      2.   System.Notification;
    • 对于C++应用程序,添加以下include关键字到项目的头文件(.h文件):
      1. #include <System.Notification.hpp>
System.Notification.TNotificationCenter.CreateNotification

方法允许您创建一个TNotification类对象实例。

添加FMLocalNotificationPermission (iOS)

FMLocalNotificationPermission 键/值对(Key/Value)在项目选项的版本信息页面启用。

  • 1、选择 Project > Options > Version Info.
  • 2、在Target区域选择Debug configuration - iOS device - 32-bit platform。
  • 3、设置FMLocalNotificationPermission的Value区域为True。

FMLocalNotificationPermission 在iOS 8 +设备设置启用本地通知:

Delphi C++移动教程:使用通知Notification(IOS和Android) Delphi专题 第7张

从代码中设置图标标记号和通知号

TNotification.Number定义了图标标记号(iOS设备)和通知号(Android设备)。
设置iOS图标标记号(Delphi或C++)或Android通知号(仅用于Delphi应用程序),您需要执行相应的方法。

  • 1、在Form上放一个TButton控件。
  • 2、在对象查看器Object Inspector上更改Name属性为SetNumber。
  • 3、双击这个按钮,在SetNumber按钮上创建OnClick事件。
  • 4、在SetNumber按钮的OnClick事件执行以下代码:

Delphi

procedure TForm1.SetNumberClick(Sender: TObject);
var
  MyNotification: TNotification;
begin
  // 创建TNotification实例
  MyNotification := NotificationCenter1.CreateNotification;
  try
      // --- 你的代码 ---
      // 设置图标或通知号
      MyNotification.Number :=18;
      // 设置警告信息
      MyNotification.AlertBody := 'Delphi创建的移动设备在这里!';
      // 注意:您必须将通知发送到通知中心,以显示要显示的图标标记号。
      NotificationCenter1.PresentNotification(MyNotification);
  finally
    MyNotification.DisposeOf;
  end;
end;

C++

void __fastcall TForm1::SetNumberClick(TObject *Sender)
{
        if (NotificationCenter1->Supported()) {
                TNotification *myNotification = NotificationCenter1->CreateNotification();
                __try {
                        myNotification->Number = 18;
                        myNotification->AlertBody = "C++创建的移动应用";
                        NotificationCenter1->PresentNotification(myNotification);
                }
                __finally {
                        myNotification->DisposeOf();
                }
        }
}

运行程序后(按F9),点击SetNumber按钮,你可以看到如下所示:

  • 应用程序图标上的一个徽章(在iOS主屏幕上):
    Delphi C++移动教程:使用通知Notification(IOS和Android) Delphi专题 第3张
  • 通知中心旁边的通知号(在Android上):Delphi C++移动教程:使用通知Notification(IOS和Android) Delphi专题 第2张

计划通知

你也可以从TCustomNotificationCenter继承的TNotificationCenter类中使用ScheduleNotification方法安排通知信息。
要显示通知消息,你需要创建一个TNotification类的实例,然后定义Name, AlertBody, and FireDate区域。

  • 1、在Form上放一个TButton控件。
  • 2、在对象查看器Object Inspector上更改Name属性为ScheduleNotification。
  • 3、双击这个按钮,在ScheduleNotification按钮上创建OnClick事件。
  • 4、在ScheduleNotification按钮的OnClick事件执行以下代码:

      Delphi

      procedure TForm1.SetNumberClick(Sender: TObject);
      var
        MyNotification: TNotification;
      begin
        // 创建TNotification实例
        MyNotification := NotificationCenter1.CreateNotification;
        try
            // --- 你的代码 ---
            // 设置图标或通知号
            MyNotification.Number :=18;
            // 设置警告信息
            MyNotification.AlertBody := 'Delphi创建的移动设备在这里!';
            // 注意:您必须将通知发送到通知中心,以显示要显示的图标标记号。
            NotificationCenter1.PresentNotification(MyNotification);
        finally
          MyNotification.DisposeOf;
        end;
      end;

      C++

      void __fastcall TForm1::ScheduleNotificationClick(TObject *Sender)
      {
              if (NotificationCenter1->Supported()) {
                      TNotification *myNotification = NotificationCenter1->CreateNotification();
                      __try {
                              myNotification->Name = "MyNotification";
                              myNotification->AlertBody = "C++ 创建的移动应用!";
                              // Fire in 10 seconds
                              myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0);
                              // Send notification to the notification center
                              NotificationCenter1->ScheduleNotification(myNotification);
                      }
                      __finally {
                              myNotification->DisposeOf();
                      }
              }
      }

      运行程序后(按F9),点击ScheduleNotification按钮,你可以看到通知消息(AlertBody)在你的设备的主屏幕上。对于iOS设备,此消息类似于如下所示:
      Delphi C++移动教程:使用通知Notification(IOS和Android) Delphi专题 第10张

      重复消息通知

      你也可以使用的TNotification对象的RepeatInterval属性重复通知消息。
      重复通知消息,你需要创建的TNotification类的一个实例,然后定义Name, AlertBody, and FireDate区域。
      你也可以用ScheduleNotification方法并设置RepeatInterval属性。在下面的代码中,重复的间隔设置为一分钟。

      • 1、在Form上放一个TButton控件。
      • 2、在对象查看器Object Inspector上更改Name属性为RepeatedNotification。
      • 3、双击这个按钮,在RepeatedNotification按钮上创建OnClick事件。
      • 4、在RepeatedNotification按钮的OnClick事件执行以下代码:

          Delphi

          procedure TForm1.RepeatedNotificationClick(Sender: TObject);
          var
            MyNotification: TNotification;
          begin
            MyNotification := NotificationCenter1.CreateNotification;
            try
              MyNotification.Title := 'MyNotification';
              MyNotification.AlertBody := '没分钟重复消息!';
              //十秒后Fired
              MyNotification.FireDate := Now + EncodeTime(0, 0, 10, 0);
              //每分钟重复
              MyNotification.RepeatInterval := TRepeatInterval.Minute;
              // 发送通知到通知中心
              NotificationCenter1.ScheduleNotification(MyNotification);
            finally
              MyNotification.Free;
            end;
          end;

          C++

          void __fastcall TForm1::RepeatedNotificationClick(TObject *Sender) {
              if (NotificationCenter1->Supported()) {
                  TNotification *myNotification =
                      NotificationCenter1->CreateNotification();
                  __try {
                      myNotification->Name = "MyNotification";
                      myNotification->AlertBody = "每分钟重复消息!";
                      // Fire in 10 seconds
                      myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0);
                      // Repeated each minute
                      myNotification->RepeatInterval = TRepeatInterval::Minute;
                      // Send notification to the notification center
                      NotificationCenter1->ScheduleNotification(myNotification);
                  }
                  __finally {
                      myNotification->Free();
                  }
              }
          }

          运行程序后(按F9),点击RepeatedNotification按钮,你可以看到通知消息(AlertBody)在你的设备的主屏幕上。对于iOS设备,此消息类似于如下所示:
          Delphi C++移动教程:使用通知Notification(IOS和Android) Delphi专题 第11张

          更新或取消预定的或重复的通知消息。

          每个计划通知消息通过TNotification对象的Name属性确定
          注:对于iOS平台,CancelNotification和ScheduleNotification未展现可以取消或更新这些通知。
          更新计划通知,只需调用具有相同名称的实例(名称属性)TNotification的ScheduleNotification方法。
          取消计划通知,你可以简单的调用你使用的定义标识符CancelNotification方法。

          • 1、在Form上放一个TButton控件。
          • 2、在对象查看器Object Inspector上更改Name属性为CancelNotification。
          • 3、双击这个按钮,在CancelNotification按钮上创建OnClick事件。
          • 4、在CancelNotification按钮的OnClick事件执行以下代码:

              Delphi

              procedure TForm1.CancelNotificationClick(Sender: TObject);
              begin
                 NotificationCenter1.CancelNotification('MyNotification');
              end;

              C++

              void __fastcall TForm1::CancelNotificationClick(TObject *Sender)
                NotificationCenter1->CancelNotification("MyNotification");

              立即提交通知消息。

              你也可以通过PresentNotification方法立即显示通知消息。
              显示通知消息,你需要创建的TNotification类的一个实例,然后定义Name和AlertBody 领域。

              • 1、在Form上放一个TButton控件。
              • 2、在对象查看器Object Inspector上更改Name属性为PresentNotification。
              • 3、双击这个按钮,在PresentNotification按钮上创建OnClick事件。
              • 4、在PresentNotification按钮的OnClick事件执行以下代码:

                  Delphi

                  procedure TForm1.PresentNotificationClick(Sender: TObject);
                  var
                    MyNotification: TNotification;
                  begin
                    MyNotification := NotificationCenter1.CreateNotification;
                    try
                      MyNotification.Name := 'MyNotification';
                      MyNotification.AlertBody := 'Delphi for your mobile device is here!';
                      // 设置图标标记号(IOS)或消息号(Android)
                      MyNotification.Number := 18;
                      MyNotification.EnableSound := False;
                      // 将消息发送到通知中心
                      NotificationCenter1.PresentNotification(MyNotification);
                    finally
                      MyNotification.DisposeOf;
                    end;
                  end;

                  C++

                  void __fastcall TForm1::PresentNotificationClick(TObject *Sender)
                  {
                    if (NotificationCenter1->Supported()) {
                             TNotification *myNotification = NotificationCenter1->CreateNotification();
                             __try {
                                     myNotification->Name = "MyNotification";
                                     myNotification->AlertBody = "C++ for your mobile device is here!";
                                     // 设置图标标记号(IOS)或消息号(Android)
                                     myNotification->Number = 18;
                                     myNotification->EnableSound = False;
                                     // 将消息发送到通知中心
                                     NotificationCenter1->PresentNotification(myNotification);
                            }
                            __finally {
                                     myNotification->DisposeOf();
                            }
                   }
                  }

                  定制通知声音

                  你也可以通过TNotification对象的SoundName属性为通知消息自定义声音。
                  你需要创建一个TNotification类的实例,定义EnableSound 和SoundName属性。您还需要指定声音文件和文件扩展名的完整路径。

                  • 1、在Form上放一个TButton控件。
                  • 2、在对象查看器Object Inspector上更改Name属性为SoundNotification。
                  • 3、双击这个按钮,在SoundNotification按钮上创建OnClick事件。
                  • 4、在SoundNotification按钮的OnClick事件执行以下代码:

                      Delphi

                      procedure TForm1.SoundNotificationClick(Sender: TObject);
                      var
                        MyNotification: TNotification;
                      begin
                        MyNotification := NotificationCenter1.CreateNotification;
                        try
                          MyNotification.Name := 'MyNotification';
                          MyNotification.AlertBody := 'Delphi创建的移动应用';
                          MyNotification.EnableSound := True;
                          MyNotification.SoundName := GetSoundName;
                          MyNotification.FireDate := Now + EncodeTime(0, 0, 10, 0);
                          // 发送消息到通知中心
                          NotificationCenter1.ScheduleNotification(MyNotification);
                        finally
                          MyNotification.Free;
                        end;
                      end;

                      C++

                      //在.cpp文件中,添加以下代码 
                      void __fastcall TForm1::SoundNotificationClick(TObject *Sender)
                      {
                      TNotification *myNotification = NotificationCenter1->CreateNotification();
                              __try {
                                  myNotification->Name = "MyNotification";
                                  myNotification->AlertBody = "C++创建的移动应用!";
                                  myNotification->EnableSound = true;
                                  myNotification->SoundName = GetSoundName();
                                  myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0);
                                  //发送消息到通知中心
                                 NotificationCenter1->ScheduleNotification(myNotification);
                              }
                              __finally {
                                  myNotification->Free();
                              }
                      }

参与评论