自從 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 發布出去:
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 的源代碼, 我們可以將其用來分別處理信標的偵測和范圍.
monitorNotifier = new MonitorNotifier ();
monitoringRegion = new Region (BEACON_ID, UUID, null, null);
rangeNotifier = new RangeNotifier ();
rangingRegion = new Region (BEACON_ID, UUID, null, null);
有了這些通知類,我們就可以創建一個信標管理器, 它將可以協調所有信標的發現和范圍更新.
beaconMgr = IBeaconManager.GetInstanceForApplication (this);
信標管理器處理了偵測器和范圍通知器的實體,這之後它就可以開始偵測和設置范圍了.
public void OnIBeaconServiceConnect ()
{
beaconMgr.SetMonitorNotifier (monitorNotifier);
beaconMgr.SetRangeNotifier (rangeNotifier);
beaconMgr.StartMonitoringBeaconsInRegion (monitoringRegion);
beaconMgr.StartRangingBeaconsInRegion (rangingRegion);
}
為了實現處理區域偵測和范圍設置的代碼,我們簡單的將Activity綁定到了信標管理器上,並將其同對應的事件處理器連接起來:
beaconMgr.Bind (this);
monitorNotifier.EnterRegionComplete += EnteredRegion;
monitorNotifier.ExitRegionComplete += ExitedRegion;
rangeNotifier.DidRangeBeaconsInRegionComplete += RangingBeaconsInRegion;
在這個應用中,我們將在Android設備發現范圍內的信標時,向用戶展示一個帶有一張QR碼圖片的消息:
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#實現這個功能了.
在 Android 使用 C# 開發 iBeacons 應用源碼下載:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2014年資料/2月/12日/在 Android 使用 C# 開發 iBeacons 應用
下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11