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


移动教程:使用通知(IOS和Android)


本教程描述了在移动设备上使用通知的基本步骤。
三个基本通知或报警样式


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

ios

Android

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

IOS标记号

Android通知号

移动设备通知中心


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

ios

Android

访问通知服务


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 +设备设置启用本地通知:

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


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

  • 1、在Form上放一个TButton控件。
  • 2、在对象查看器Object Inspector上更改Name属性为SetNumber。
  • 3、双击这个按钮,在SetNumber按钮上创建OnClick事件。
  • 4、在SetNumber按钮的OnClick事件执行以下代码:
    • Delphi:
      1. procedure TForm1.SetNumberClick(Sender: TObject);
      2. var
      3.   MyNotification: TNotification;
      4. begin
      5.   // 创建TNotification实例
      6.   MyNotification := NotificationCenter1.CreateNotification;
      7.   try
      8.       // --- 你的代码 ---
      9.       // 设置图标或通知号
      10.       MyNotification.Number :=18;
      11.       // 设置警告信息
      12.       MyNotification.AlertBody := 'Delphi创建的移动设备在这里!';
      13.       // 注意:您必须将通知发送到通知中心,以显示要显示的图标标记号。
      14.       NotificationCenter1.PresentNotification(MyNotification);
      15.   finally
      16.     MyNotification.DisposeOf;
      17.   end;
      18. end;
    • C++:
      1. void __fastcall TForm1::SetNumberClick(TObject *Sender)
      2. {
      3.         if (NotificationCenter1->Supported()) {
      4.                 TNotification *myNotification = NotificationCenter1->CreateNotification();
      5.                 __try {
      6.                         myNotification->Number = 18;
      7.                         myNotification->AlertBody = "C++创建的移动应用";
      8.                         NotificationCenter1->PresentNotification(myNotification);
      9.                 }
      10.                 __finally {
      11.                         myNotification->DisposeOf();
      12.                 }
      13.         }
      14. }

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

  • 应用程序图标上的一个徽章(在iOS主屏幕上):
  • 通知中心旁边的通知号(在Android上):

计划通知


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

  • 1、在Form上放一个TButton控件。
  • 2、在对象查看器Object Inspector上更改Name属性为ScheduleNotification。
  • 3、双击这个按钮,在ScheduleNotification按钮上创建OnClick事件。
  • 4、在ScheduleNotification按钮的OnClick事件执行以下代码:
    • Delphi:
      1. procedure TForm1.SetNumberClick(Sender: TObject);
      2. var
      3.   MyNotification: TNotification;
      4. begin
      5.   // 创建TNotification实例
      6.   MyNotification := NotificationCenter1.CreateNotification;
      7.   try
      8.       // --- 你的代码 ---
      9.       // 设置图标或通知号
      10.       MyNotification.Number :=18;
      11.       // 设置警告信息
      12.       MyNotification.AlertBody := 'Delphi创建的移动设备在这里!';
      13.       // 注意:您必须将通知发送到通知中心,以显示要显示的图标标记号。
      14.       NotificationCenter1.PresentNotification(MyNotification);
      15.   finally
      16.     MyNotification.DisposeOf;
      17.   end;
      18. end;
    • C++:
      1. void __fastcall TForm1::ScheduleNotificationClick(TObject *Sender)
      2. {
      3.         if (NotificationCenter1->Supported()) {
      4.                 TNotification *myNotification = NotificationCenter1->CreateNotification();
      5.                 __try {
      6.                         myNotification->Name = "MyNotification";
      7.                         myNotification->AlertBody = "C++ 创建的移动应用!";
      8.                         // Fire in 10 seconds
      9.                         myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0);
      10.                         // Send notification to the notification center
      11.                         NotificationCenter1->ScheduleNotification(myNotification);
      12.                 }
      13.                 __finally {
      14.                         myNotification->DisposeOf();
      15.                 }
      16.         }
      17. }

运行程序后(按F9),点击ScheduleNotification按钮,你可以看到通知消息(AlertBody)在你的设备的主屏幕上。对于iOS设备,此消息类似于如下所示:


重复消息通知


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

  • 1、在Form上放一个TButton控件。
  • 2、在对象查看器Object Inspector上更改Name属性为RepeatedNotification。
  • 3、双击这个按钮,在RepeatedNotification按钮上创建OnClick事件。
  • 4、在RepeatedNotification按钮的OnClick事件执行以下代码:
      • Delphi:
        1. procedure TForm1.RepeatedNotificationClick(Sender: TObject);
        2. var
        3.   MyNotification: TNotification;
        4. begin
        5.   MyNotification := NotificationCenter1.CreateNotification;
        6.   try
        7.     MyNotification.Title := 'MyNotification';
        8.     MyNotification.AlertBody := '没分钟重复消息!';
        9.     //十秒后Fired
        10.     MyNotification.FireDate := Now + EncodeTime(00100);
        11.     //每分钟重复
        12.     MyNotification.RepeatInterval := TRepeatInterval.Minute;
        13.     // 发送通知到通知中心
        14.     NotificationCenter1.ScheduleNotification(MyNotification);
        15.   finally
        16.     MyNotification.Free;
        17.   end;
        18. end;
      • C++
        1. void __fastcall TForm1::RepeatedNotificationClick(TObject *Sender) {
        2.     if (NotificationCenter1->Supported()) {
        3.         TNotification *myNotification =
        4.             NotificationCenter1->CreateNotification();
        5.         __try {
        6.             myNotification->Name = "MyNotification";
        7.             myNotification->AlertBody = "每分钟重复消息!";
        8.             // Fire in 10 seconds
        9.             myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0);
        10.             // Repeated each minute
        11.             myNotification->RepeatInterval = TRepeatInterval::Minute;
        12.             // Send notification to the notification center
        13.             NotificationCenter1->ScheduleNotification(myNotification);
        14.         }
        15.         __finally {
        16.             myNotification->Free();
        17.         }
        18.     }
        19. }

运行程序后(按F9),点击RepeatedNotification按钮,你可以看到通知消息(AlertBody)在你的设备的主屏幕上。对于iOS设备,此消息类似于如下所示:


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


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

  • 1、在Form上放一个TButton控件。
  • 2、在对象查看器Object Inspector上更改Name属性为CancelNotification。
  • 3、双击这个按钮,在CancelNotification按钮上创建OnClick事件。
  • 4、在CancelNotification按钮的OnClick事件执行以下代码:
    • Delphi:
      1. procedure TForm1.CancelNotificationClick(Sender: TObject);
      2. begin
      3.    NotificationCenter1.CancelNotification('MyNotification');
      4. end;
    • C++:
      1. void __fastcall TForm1::CancelNotificationClick(TObject *Sender)
      2.   NotificationCenter1->CancelNotification("MyNotification");

立即提交通知消息。


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

  • 1、在Form上放一个TButton控件。
  • 2、在对象查看器Object Inspector上更改Name属性为PresentNotification。
  • 3、双击这个按钮,在PresentNotification按钮上创建OnClick事件。
  • 4、在PresentNotification按钮的OnClick事件执行以下代码:
    • Delphi:
      1. procedure TForm1.PresentNotificationClick(Sender: TObject);
      2. var
      3.   MyNotification: TNotification;
      4. begin
      5.   MyNotification := NotificationCenter1.CreateNotification;
      6.   try
      7.     MyNotification.Name := 'MyNotification';
      8.     MyNotification.AlertBody := 'Delphi for your mobile device is here!';
      9.     // 设置图标标记号(IOS)或消息号(Android)
      10.     MyNotification.Number := 18;
      11.     MyNotification.EnableSound := False;
      12.     // 将消息发送到通知中心
      13.     NotificationCenter1.PresentNotification(MyNotification);
      14.   finally
      15.     MyNotification.DisposeOf;
      16.   end;
      17. end;
    • C++:
      1. void __fastcall TForm1::PresentNotificationClick(TObject *Sender)
      2. {
      3.   if (NotificationCenter1->Supported()) {
      4.            TNotification *myNotification = NotificationCenter1->CreateNotification();
      5.            __try {
      6.                    myNotification->Name = "MyNotification";
      7.                    myNotification->AlertBody = "C++ for your mobile device is here!";
      8.                    // 设置图标标记号(IOS)或消息号(Android)
      9.                    myNotification->Number = 18;
      10.                    myNotification->EnableSound = False;
      11.                    // 将消息发送到通知中心
      12.                    NotificationCenter1->PresentNotification(myNotification);
      13.           }
      14.           __finally {
      15.                    myNotification->DisposeOf();
      16.           }
      17.  }
      18. }

定制通知声音


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

  • 1、在Form上放一个TButton控件。
  • 2、在对象查看器Object Inspector上更改Name属性为SoundNotification。
  • 3、双击这个按钮,在SoundNotification按钮上创建OnClick事件。
  • 4、在SoundNotification按钮的OnClick事件执行以下代码:
    • Delphi:
      1. procedure TForm1.SoundNotificationClick(Sender: TObject);
      2. var
      3.   MyNotification: TNotification;
      4. begin
      5.   MyNotification := NotificationCenter1.CreateNotification;
      6.   try
      7.     MyNotification.Name := 'MyNotification';
      8.     MyNotification.AlertBody := 'Delphi创建的移动应用';
      9.     MyNotification.EnableSound := True;
      10.     MyNotification.SoundName := GetSoundName;
      11.     MyNotification.FireDate := Now + EncodeTime(00100);
      12.     // 发送消息到通知中心
      13.     NotificationCenter1.ScheduleNotification(MyNotification);
      14.   finally
      15.     MyNotification.Free;
      16.   end;
      17. end;
    • C++:
      • 在.cpp文件中,添加以下代码
        1. void __fastcall TForm1::SoundNotificationClick(TObject *Sender)
        2. {
        3. TNotification *myNotification = NotificationCenter1->CreateNotification();
        4.         __try {
        5.             myNotification->Name = "MyNotification";
        6.             myNotification->AlertBody = "C++创建的移动应用!";
        7.             myNotification->EnableSound = true;
        8.             myNotification->SoundName = GetSoundName();
        9.             myNotification->FireDate = Now() + EncodeTime(0, 0, 10, 0);
        10.             //发送消息到通知中心
        11.            NotificationCenter1->ScheduleNotification(myNotification);
        12.         }
        13.         __finally {
        14.             myNotification->Free();
        15.         }
        16. }
  • 声明GetSoundName函数
    • Delphi:
      • 在单元的private节设置声明GetSoundName 。
      • 在uses条款添加System.IOUtils
        1. uses
        2.   System.IOUtils;
        3. private
        4.     function GetSoundName: string;
    • C++:
      • 在头文件(.h 文件)中,添加以下声明:
      • 在单元的private节设置声明GetSoundName
      • Include System.IOUtils.hpp到项目
        1. #include <System.IOUtils.hpp>
        2. private:    // User declarations
        3.      __fastcall  UnicodeString GetSoundName ();
  • 6、实施GetSoundName函数
    注:根据目标操作系统,声音数据应该是不同的文件扩展名。

    • Delphi:
      1. {$R *.fmx}
      2. function TForm1.GetSoundName: string;
      3. begin
      4. {$IFDEF IOS}
      5.   Result := 'myiOSSound.caf';
      6. {$ENDIF}
      7. {$IFDEF ANDROID}
      8.   Result := TPath.Combine(TPath.GetSharedDocumentsPath, 'myAndroidSound.mp3');
      9. {$ENDIF}
      10. end;
    • C++:
      • 在.cpp文件, 添加以下代码:
        1. UnicodeString __fastcall TForm1::GetSoundName ()
        2. {
        3.     UnicodeString result;
        4. #if defined(_PLAT_IOS)
        5.     result = "myiOSSound.caf";
        6. #endif
        7. #if defined(__ANDROID__)
        8.     result = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDocumentsPath(), "myAndroidSound.mp3");
        9. #endif
        10.     return result;
        11.   //
        12. }
  • 7、将声音文件添加到项目中:
    • 在Windows资源管理器找到myAndroidSound.mp3和myiOSSound.caf文件,把他们拖到Project Manager中。把他们拖到应用项目名上。
      注:声音文件myAndroidSound.mp3和myiOSSound.caf不包括在RAD Studio安装包中。您可以使用任何MP3和CAF文件,但要记住将代码段中的名称改为文件名。有关如何将MP3文件转换为CAF格式的更多信息,请自行百度
    • 在Confirm 确认对话框中,单击Yes将声音文件添加到项目中。
  • 8、打开部署管理器Deployment Manager,确保声音文件与应用程序一起部署。您可以在远程路径remote path列中看到相应的条目:
  • 9、更改部署管理器(Deployment Manager)中添加的文件的远程路径(remote path):
    • iOS: .\
    • Android: assets\

通知横幅或通知警报


默认情况下,应用程序显示通知横幅:

  • iPad上的横幅通知
  • Android上的通知横幅
  • 通知警报(仅ios设备)

要使用通知警报而不是通知横幅(仅用于iOS设备),终端用户需要通过设备中心中的通知中心的配置页面更改警报样式为警报:

向通知警报添加操作(仅IOS)


您还可以通过添加打开应用程序的动作按钮来定制警报。
自定义报警操作,你需要设置AlertAction区域动作按钮的名称,然后设置HasAction区域为True,如下。

  • 1、在Form上放一个TButton控件。
  • 2、在对象查看器Object Inspector上更改Name属性为ActionNotification。
  • 3、双击这个按钮,在ActionNotification按钮上创建OnClick事件。
  • 4、在ActionNotification按钮的OnClick事件执行以下代码:
    • Delphi:
      1. procedure TForm1.ActionNotificationClick(Sender: TObject);
      2. var
      3.   MyNotification: TNotification;
      4. begin
      5.    MyNotification := NotificationCenter1.CreateNotification;
      6.   try
      7.     MyNotification.Name := 'MyNotification';
      8.     MyNotification.AlertBody := 'Delphi创建的iso应用! ';
      9.     MyNotification.Number := 2;
      10.     MyNotification.AlertAction := 'Launch';
      11.     MyNotification.HasAction := True;
      12.     MyNotification.FireDate := Now + EncodeTime(00200);
      13.     NotificationCenter1.ScheduleNotification(MyNotification);
      14.   finally
      15.     MyNotification.DisposeOf;
      16.   end;
      17. end;
    • C++:
      1. void __fastcall TForm1::ActionNotificationClick(TObject *Sender)
      2. {
      3.    if (NotificationCenter1->Supported()) {
      4.            TNotification *myNotification = NotificationCenter1->CreateNotification();
      5.            __try {
      6.                    myNotification->Name = "MyNotification";
      7.                    myNotification->AlertBody = "C++创建的ios应用!";
      8.                    myNotification->Number = 2;
      9.                    myNotification->AlertAction = "Launch";
      10.                    myNotification->HasAction = True;
      11.                    myNotification->FireDate = Now() + EncodeTime(0,0,20,0);
      12.                    NotificationCenter1->ScheduleNotification(myNotification);
      13.            }
      14.            __finally {
      15.                    myNotification->DisposeOf();
      16.            }
      17.    }
      18.  }

注:只有iOS设备支持通知警报功能。
添加Action到通知


TNotificationCenter类提供onReceiveLocalNotification事件处理,当用户在通知中心点击通知消息时,允许你写入响应。写入响应,在窗口设计器Form Designer双击TNotificationCenter控件,然后在OnReceiveLocalNotification事件中执行。
下面的代码片段实现了点击通知显示<通知名>的响应。

  • Delphi:


    1. procedure TForm1.NotificationCenter1ReceiveLocalNotification(Sender: TObject; ANotification: TNotification);   

    2.    begin  

    3.      ShowMessage('The ' + ANotification.Name + ' notification clicked.' );   

    4.    end;  
  • C++:


    1. void __fastcall TForm1::NotificationCenter1ReceiveLocalNotification(TObject *Sender, TNotification *ANotification)   

    2. {   

    3.        ShowMessage("The " + ANotification->Name + " notification clicked.");   

    4. }  

运行应用


运行应用程序,选择Run >Run 或按F9。单击不同的按钮来安排或显示设备中的通知。

参阅


» 本文链接:http://www.soguifan.com/delphi/app/1558.html
» 订阅本站:http://www.soguifan.com/feed
» 转载请注明来源:搜规范 » 《Delphi C++移动教程:使用通知(IOS和Android)》

微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixin    pay_weixin
金额随意 快来“打”我呀~




留言