RAD Studio安卓信标服务(Android Beacon Service)示例


FMX.Android Beacon Service示例


这个Demo显示了一个Android应用程序当一个接近(低于0.5米)的信标(beacon)被检测到时,使用Android服务提供一个通知。即使主应用程序不运行,Android服务也是后台任务。完成任务后,服务停止。
示例位置


你可以在下边路径找到Android Beacon Service示例:

描述


此示例演示如何创建和使用Android本地服务来呈现预定通知。

  • 信标服务(Beacon Service)项目由一个数据模块组成。当检测到一个信标临近时,TNotificationCenter 组件创建并显示通知。对于一个特定的信标参数配置使用TBeacon 组件。
  • 信标服务应用程序启动Android服务在Android设备上显示一个通知。一旦检测到信标,就会发出通知。当用户处理它,一个消息被发送到TMemo。处理通知,应用程序使用TNotificationCenter 组件。

如何使用示例


打开工程:

  • 1、打开上述路径。
  • 2、打开示例应用程序组的项目文件:BeaconServiceDemo.groupproj

创建Android服务:

  • 1、在Project Manager选择libBeaconService.so
  • 2、右键点击Compile。
    注: 编译项目生成您需要添加到主应用程序的文件.

将Android服务添加到主应用程序:

  • 1、在Project Manager选择BeaconServiceApp
  • 2、展开Target Platforms节点
  • 3、选择Android设备
  • 4、右键单击Android设备,然后选择Add Android Service.添加Android服务。
  • 5、选择位置 C:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\Multi-Device Samples\Device Sensors and Services\AndroidBeaconServiceDemo\BeaconService.
  • 6、点击Next
    • 注:检查定位这些添加的文件:libBeaconService.so, BeaconService.jar, and BeaconServiceUnit.pas.
  • 7、按F9或选择Run > Run部署应用程序到Android设备

启动Android服务

  • 1、要启动服务,在通知应用程序上单击Start Service开启服务。
  • 2、在Android设备上等待预定的时间在屏幕上看到通知。
  • 3、点击通知,从主应用程序的TNotificationCenter触发 OnReceiveLocalNotification事件。
  • 4、看到消息通知收到:RAD Studio 10 Seattle in the TMemo.。

配置Beacon


您需要为演示程序设置要使用的Beacon设备的特定参数。
从服务的Data Module配置TBeacon组件

  • 1、选择TBeacon组件
  • 2、在对象查看器(Object Inspector)找到MonitorizedRegions属性。
  • 3、在看到的TBeaconRegionCollection旁边点击...
  • 4、选择已存在的TBeaconRegionItem : 0-TBeaconRegionItem
  • 5、从Object Inspector编辑Major, Minor和UUID属性。

启动安卓服务


  • 1、要启动服务,在信标服务应用程序上,点击Start Service开启服务。
  • 2、将Android设备放置在信标beacon设备附近。距离必须小于0.5米。
  • 3、当检测到信标beacon时,屏幕中显示一个通知。
  • 4、点击通知,从主应用程序的TNotificationCenter触发 OnReceiveLocalNotification事件。
  • 5、在TMemo控件中,你会看到'Beacon Proximity detected:'+ BeaconName的信息。

实现


Beacon Service
信标服务是一个Android服务项目。服务的类型是本地的。
Data Module中包含TNotificationCenter和TBeacon控件
当服务开启,OnStartCommand事件从 Data Module中触发。OnStartCommand 支持TBeacon开始自动区域扫描

  1. function TBeaconServiceDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags,
  2.   StartId: Integer): Integer;
  3. begin
  4.   Beacon1.Enabled := True; //让TBeacon组件开始扫描区域。
  5.   Result := TJService.JavaClass.START_STICKY; //'OnStartCommand'事件默认定义为 START_NOT_STICKY,这行代码将其设置为START_STICKY.
  6. end;

注:当定义为start_sticky,当被杀掉后系统尝试重新创建服务。
TBeacon 的OnBeaconProximity 每次Proximity 值改变时事件触发。当临近时,它调用NotifyBeaconProximity过程在Android设备显示一个通知。

  1. procedure TBeaconServiceDM.Beacon1BeaconProximity(const Sender: TObject; const ABeacon: IBeacon;
  2.   Proximity: TBeaconProximity);
  3. begin
  4.   if Proximity = TBeaconProximity.Immediate then //检查靠近信标装置的距离是否低于0.5米。
  5.     NotifyBeaconProximity(ABeacon.GUID.ToString + ':' + ABeacon.Major.ToString + ',' + ABeacon.Minor.ToString); //调用NotifyBeaconProximity显示检测到的Beacon设备一些参数
  6. end;

TBeacon组件的MonitorizedRegions 属性定义要监控的区域。TBeacon设备收集的采集区域被其他的Major, Minor和UUID定义
信标服务应用
信标服务应用程序是一个多设备应用程序项目。
Start Service按钮的OnClick事件处理调用TLocalServiceConnection类的StartService方法。
注:TLocalServiceConnection是管理连接到Android本地服务的一个辅助类。

  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   TLocalServiceConnection.StartService('BeaconService'); //初始化TLocalServiceConnection变量到一个特定的服务,并启动。
  4. end;

注:在启动服务之后,您不需要引用其他方法的服务名称。
TNotification控件的OnReceiveLocalNotification事件触发一次用户在Android设备上的通知,这意味着点击通知,不驳回他。

  1. procedure TForm1.NotificationCenter1ReceiveLocalNotification(Sender: TObject; ANotification: TNotification);
  2. begin
  3.   Memo1.Lines.Add(ANotification.AlertBody); //它显示了在Android服务项目上定义的通知的警报主体。
  4. end;

Uses


  • TNotificationCenter
  • TBeacon
  • System.Android.Service
  • System.Android.ServiceApplication

该示例使用的为Android内置的java库。

  • Androidapi.JNI.App
  • AndroidApi.JNI.GraphicsContentViewText
  • Androidapi.JNI.Os

参阅


» 本文链接:http://www.soguifan.com/delphi/1539.html
» 订阅本站:http://www.soguifan.com/feed
» 转载请注明来源:搜规范 » 《RAD Studio安卓信标服务(Android Beacon Service)示例》

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




留言