开源中国

我们不支持 IE 10 及以下版本浏览器

It appears you’re using an unsupported browser

为了获得更好的浏览体验,我们强烈建议您使用较新版本的 Chrome、 Firefox、 Safari 等,或者升级到最新版本的IE浏览器。 如果您使用的是 IE 11 或以上版本,请关闭“兼容性视图”。
在 Android 使用 C# 开发 iBeacons 应用 - 技术翻译 - 开源中国社区

在 Android 使用 C# 开发 iBeacons 应用 【已翻译100%】

oschina 推荐于 4年前 (共 3 段, 翻译完成于 02-11) 评论 12
收藏  
39
参与翻译 (1人) : LeoXu 仅中文 | 中英文对照 | 仅英文 | 打印此文章

自从 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了 .

LeoXu
 翻译得不错哦!

让我们来看看如何使用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);
LeoXu
 翻译得不错哦!

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

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#实现这个功能了.

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

LeoXu
 翻译得不错哦!
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们
评论(12)
Ctrl/CMD+Enter

求Xamarin在vs2013上的破解版,不学objc了,靠C#走天下
支持 Mono。
不要这么快啊!!! 我还没mac呢!!
C#牛逼

引用来自“Tenzing”的评论

求Xamarin在vs2013上的破解版,不学objc了,靠C#走天下

同求,你找到了请艾特我,谢谢!

引用来自“Caskia”的评论

引用来自“Tenzing”的评论

求Xamarin在vs2013上的破解版,不学objc了,靠C#走天下

同求,你找到了请艾特我,谢谢!

铜球

引用来自“开源中国匿名会员”的评论

引用来自“Caskia”的评论

引用来自“Tenzing”的评论

求Xamarin在vs2013上的破解版,不学objc了,靠C#走天下

同求,你找到了请艾特我,谢谢!

铜球

一样!

引用来自“夜梦轮回”的评论

引用来自“开源中国匿名会员”的评论

引用来自“Caskia”的评论

引用来自“Tenzing”的评论

求Xamarin在vs2013上的破解版,不学objc了,靠C#走天下

同求,你找到了请艾特我,谢谢!

铜球

一样!

我博客里有了噢
看好xamarin

引用来自“夜梦轮回”的评论

引用来自“开源中国匿名会员”的评论

引用来自“Caskia”的评论

引用来自“Tenzing”的评论

求Xamarin在vs2013上的破解版,不学objc了,靠C#走天下

同求,你找到了请艾特我,谢谢!

铜球

一样!

同求

引用来自“Tenzing”的评论

引用来自“夜梦轮回”的评论

引用来自“开源中国匿名会员”的评论

引用来自“Caskia”的评论

引用来自“Tenzing”的评论

求Xamarin在vs2013上的破解版,不学objc了,靠C#走天下

同求,你找到了请艾特我,谢谢!

铜球

一样!

我博客里有了噢

谢谢!
Android 不支持iBeancons,因为android 的BLE支持不完全,不能发送advertise.
顶部