安卓奇巧糖是否允许支持低功耗蓝牙的设备作为外围设备?

16
直到Android 4.3,支持低功耗蓝牙的Android设备只能作为中心设备。如Android 4.3 Bluetooth LE文档所述:
“Android 4.3(API Level 18)引入了内置平台支持Bluetooth Low Energy在中心角色,并提供了应用程序可以使用的API来发现设备、查询服务和读写特征。”
随着Android 4.4 KitKat的推出,现在它也可以作为外围设备吗?我找不到任何相关文档。如果不行,那么我们是否需要等待Android 4.5才能在Android设备上获取BTLE外围模式?或者有没有其他替代方法使Android设备充当外围设备?

我猜还没有:https://code.google.com/p/android/issues/detail?id=59693 - Vrashabh Irde
谢谢伙计。那个请求是在4.4发布之前的。我也评论了希望在4.4中看到一些改变。你知道是否有其他替代方法吗? - Shobhit Puri
很不幸,我不确定你能够解决它,因为外设更多涉及网络架构/硬件相关。也许你可以研究一下GATT服务器/客户端的东西,尝试去做一些骇客操作(虽然并不推荐,但是绝望的时候只能这样 :))。但看起来在他们发布新版本之前都没有什么希望。 - Vrashabh Irde
1
在BLE中,中央设备决定时间,而外围设备只需遵循指令(主/从)。因此,一个只有一个无线电的设备不能同时作为从设备和主设备。这使得创建支持两者的API变得有些困难。 - Vegar Westerlund
3个回答

18

目前版本中没有,但有证据表明它即将推出。
如果你查看 Android-19 源代码中的 BluetoothGatt.java,会发现一些新方法 listensetAdvData,而在 Android-18 中并没有这些方法。
然而,由于原生支持尚未完全完成,因此这些方法并没有文档记录。AOSP 上的最新检查对外围模式的支持标题为“LE:添加外围角色支持(2/4)”。同时,setAdvDatalisten 还包含以下代码:

if (mContext == null || !mContext.getResources().getBoolean(com.android.internal.R.bool.config_bluetooth_le_peripheral_mode_supported))
{
    throw new UnsupportedOperationException("BluetoothGatt#listen is blocked");
}

查看Android源代码android/platform_frameworks_base/blob/master/core/res/res/values/config.xml,你会发现当前该功能已被禁用:

<!-- Boolean indicating if current platform supports BLE peripheral mode -->
<bool name="config_bluetooth_le_peripheral_mode_supported">false</bool>

你知道我们如何从config.xml文件中读取那个值(例如:config_bluetooth_le_peripheral_mode_supported)吗? - anticafe

11
感谢大家的回答。截至2014年6月,它已在Android L开发者预览版中提供。希望能在Android L正式发布中看到它。根据他们的博客Android中的新功能:L Developer Preview和Google Play服务5.0
L Developer Preview让您探索下一个Android版本的许多新功能和能力,并提供了开始在新平台上开发和测试所需的一切。以下是开发人员的亮点:
BLE外设模式 - Android设备现在可以在蓝牙低功耗(BLE)外设模式下运行。应用程序可以使用此功能向附近设备广播其存在-例如,您现在可以构建允许设备作为计步器或健康监视器并将数据传输到另一个BLE设备的应用程序。
更新:
坏消息是BLE外设模式仅适用于较新的Android设备(截至目前),如Nexus 6和Nexus 9。即使您将其更新到Android 5.0,它也无法在Nexus 4 / Nexus 5 / nexus 7 / nexus 10上运行。您可以阅读BLE advertise mode not working票据中的一个Android项目经理的comment。他说:
“我们在Android 5.0 Lollipop中引入了BLE外设模式。 Nexus 6和Nexus 9是支持BLE外设模式的首两个生产Nexus设备。由于硬件芯片组依赖性,旧的Nexus设备(4/5/7)将无法在Lollipop上使用此功能。”

7

http://developer.android.com/sdk/api_diff/19/changes.html

通过查看完整的api差异,简短地回答是:不行。

==============

如果你现在想要添加外设角色支持,则必须要在操作系统层面自定义Bluedroid堆栈,或者尝试在XDA开发者社区中寻找是否有人已经完成了这个任务。我不确定当前的Android手机是否支持硬件级别的外设角色。


谢谢reTs。你能回答第二部分吗?你知道或者可能有其他的替代方法吗? - Shobhit Puri
1
不好意思打广告,但我们已经做了一些工作来实现这个功能,但它需要一个定制的ROM,也许一些工作可以移植到基于NDK的解决方案:http://blog.cozybit.com/enabling-peripheral-mode-in-android-kitkat-4-4--你会注意到在底部,我们指出AOSP master已经支持这个功能,所以Android 4.5/5.0将支持这个功能。 - silverjam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接