2013-10-31 82 views
14

直到Android 4.3,具有蓝牙低耗能支持的Android设备只能充当中央设备。正如Android 4.3 Bluetooth LE文档中给出:Android KitKat是否允许支持蓝牙LE的设备充当外围设备?

的Android 4.3(API等级18)推出内建平台支持蓝牙低功耗在核心作用提供的API,应用程序可以用它来发现设备,查询服务和读/写特性。

随着Android 4.4 KitKat的推出,它现在还可以作为外设吗?我找不到任何文件。如果没有,那么我们是否必须等待Android 4.5才能在Android设备上获得BTLE外设模式?或者有没有其他方式可以让Android设备充当外围设备?

+0

还不是我猜:https://code.google.com/p/android/issues/detail?id=59693 – Slartibartfast

+0

感谢哥们。该请求在4.4版发布之前。我还评论说希望看到4.4中的一些变化。你知道有没有其他方法可行? –

+0

不知道你可以解决它不幸的是,外设是更多的网络架构/硬件相关。也许你可以看看GATT服务器/客户端的东西,并试图破解一些东西(不是真的推荐,但嘿绝望的时候正确:))。但看起来黯淡,直到他们把它拿出来 – Slartibartfast

回答

10

谢谢大家的答案。只是为了更新,截至2014年6月,它是在Android L Developer预览版中提供的。希望在Android L官方发布中看到它。从他们的博客New in Android: L Developer Preview and Google Play Services 5.0

将L开发者预览版,让您探索了许多新的功能和Android的下一个版本的功能,并提供你需要开始开发,并在新平台上测试的一切。这里有几个亮点开发商:

BLE外设模式 - Android设备现在可以在蓝牙低功耗(BLE)外围模式功能。应用程序可以使用此功能向附近的设备广播其存在 - 例如,您现在可以构建应用程序,让设备充当计步器或运行状况监视器,并将数据传输到另一个BLE设备。

更新:

的坏消息是,BLE外设模式只能在较新的Android设备运行(按日期),即Nexus 6和Nexus 9。它不会在工作Nexus 4/Nexus 5/nexus 7/nexus 10,即使您将其更新至Android 5.0。您可以通过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差异,总之答案是:NO

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

要添加外围支持作用现在您必须弄脏自己的操作系统才能在操作系统级别定制Bluedroid堆栈,或者试试XDA开发人员的运气,看看有没有人曾经这样做过。不过,我不确定当前的Android手机是否支持硬件级别的外设角色。

+0

谢谢你的关心。你能回答第二部分吗?他们的任何替代方式是否可以做到你知道或可以做到的相同? –

+0

@Puri看到我的编辑。虽然没有多少希望。 – reTs

+1

无耻的插件,但我们已经做了一些工作来实现这一点,但它需要一个自定义ROM,也许一些工作可以移植到基于NDK的解决方案:http://blog.cozybit.com/enabling-peripheral- Android-kitkat-4-4中的模式 - 你会注意到底层,我们指出AOSP主已经支持这个,所以Android 4.5/5.0将会支持这个。 – silverjam

17

不是在这个版本,但有证据表明它即将推出。
如果你在android-19源代码中查看BluetoothGatt.java,那么在android-18中不存在新的方法listensetAdvData
但是这些都没有记录,因为我不认为本地支持是完整的。最后一次检查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 /主/核心/ RES/RES /价值/ config.xml中你可以看到,这是当前已禁用:

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

您知道如何从config.xml文件读取该值(例如:config_bluetooth_le_peripheral_mode_supported)吗? – anticafe