在 Android 使用 C# 开发 iBeacons 应用

自从 Apple 在iOS 7中引入了iBeacons, 对它们的关注现在已经甚嚣尘上. 例如, Apple 正在将它们应用在其零售商店中, NFL将它们安装在 Super Bowl 上,而 Major League Baseball 也将会在即将到来的赛季期间使用到它们. 我们之前已经讨论过如在用一个Find the Monkey’;游戏在你的 Xamarin.iOS应用中实现iBeacons,还有如何在一个零售商店环境下运用它们, 而今天我们将要讨论的则是如何向你的Xamarin.Android应用加入同样的iBeancon支持. 

iBeacons 可以让设备发现其附近的“信标”,它们可以是第三方硬件或者是iOS设备. 此前, 探寻iBeacons的功能被限制在 iOS 7. 而这里得感谢由Chris Riesgo创建的 Radius Networks 和 Xamarin.Android iBeacon Service Component, 由于他们的辛勤工作,现在你可以通过支持Bluetooth LE的Android设备来发现iBeacons了 . 

 

让我们来看看如何使用Android iBeacon Service 组件来发现 iBeacon, 在这个测试信标中我们将运行一个 iOS 应用程序,它使用如下所示的 Core Bluetooth 来将其 iBeacon 发布出去:

?
1
2
3
4
5
6
7
8
9
10
11
var  uuid =  new  NSUuid ( "A1F30FF0-0A9F-4DE0-90DA-95F88164942E" );
var  beaconId =  "iOSBeacon" ;
var  beaconRegion =  new  CLBeaconRegion (uuid, beaconId) {
   NotifyEntryStateOnDisplay =  true ,
   NotifyOnEntry =  true ,
   NotifyOnExit =  true
};
var  peripheralData = beaconRegion.GetPeripheralData ( new  NSNumber (-59));
peripheralDelegate =  new  BTPeripheralDelegate ();
peripheralMgr =  new  CBPeripheralManager (peripheralDelegate, DispatchQueue.DefaultGlobalQueue);
peripheralMgr.StartAdvertising (peripheralData);

一旦 iBeacon 被发布出来, 其它的 iOS 7 应用和 Android 应用就能够发现它.

Chris的组件, 像所有的 Xamarin 组件一样, 包含一个示例项目. 在这里,示例项目是一个运作起来跟iOS上运行的示例一样的Android应用程序,出自Find the Monkey这篇文章. 这段代码是构建属于你自己的使用iBeancon的应用程序的一个很棒的开始. 示例中包括了两个叫做 MonitorNotifier  RangeNotifier 的源代码, 我们可以将其用来分别处理信标的侦测和范围.

?
1
2
3
4
monitorNotifier =  new  MonitorNotifier ();
monitoringRegion =  new  Region (BEACON_ID, UUID,  null null );
rangeNotifier =  new  RangeNotifier ();
rangingRegion =  new  Region (BEACON_ID, UUID,  null null );
 

有了这些通知类,我们就可以创建一个信标管理器, 它将可以协调所有信标的发现和范围更新. 

?
1
beaconMgr = IBeaconManager.GetInstanceForApplication ( this );

信标管理器处理了侦测器和范围通知器的实体,这之后它就可以开始侦测和设置范围了. 

?
1
2
3
4
5
6
7
public  void  OnIBeaconServiceConnect ()
{
   beaconMgr.SetMonitorNotifier (monitorNotifier);
   beaconMgr.SetRangeNotifier (rangeNotifier);
   beaconMgr.StartMonitoringBeaconsInRegion (monitoringRegion);
   beaconMgr.StartRangingBeaconsInRegion (rangingRegion);
}

为了实现处理区域侦测和范围设置的代码,我们简单的将Activity绑定到了信标管理器上,并将其同对应的事件处理器连接起来: 

?
1
2
3
4
beaconMgr.Bind ( this );
monitorNotifier.EnterRegionComplete += EnteredRegion;
monitorNotifier.ExitRegionComplete += ExitedRegion;
rangeNotifier.DidRangeBeaconsInRegionComplete += RangingBeaconsInRegion;

在这个应用中,我们将在Android设备发现范围内的信标时,向用户展示一个带有一张QR码图片的消息: 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void  EnteredRegion ( object  sender, MonitorEventArgs e)
{
   ShowMessage ( "Welcome back!" );
}
void  ExitedRegion ( object  sender, MonitorEventArgs e)
{
   ShowMessage ( "Thanks for shopping here!" );
}
void  RangingBeaconsInRegion ( object  sender, RangeEventArgs e)
{
   if  (e.Beacons.Count > 0) {
     var  beacon = e.Beacons.FirstOrDefault ();
     switch  ((ProximityType)beacon.Proximity) {
       case  ProximityType.Immediate:
       case  ProximityType.Near:
       case  ProximityType.Far:
         ShowMessage ( "Here's a coupon!" true );
         break ;
       case  ProximityType.Unknown:
         ShowMessage ( "Beacon proximity unknown" );
         break ;
       }
     }
}

当我们靠近信标的时候,我们看到消息发生了变化,QR码图片被显示了出来. 

正如你在这里和我们之前的文章中所见,整个场景的代码非常相似,至少iBeacon部分是很相似的. 幸好有这个组件,在 iOS 和 Android上你都能用C#实现这个功能了. 

这篇文章的源代码在 Git 里面.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值