在Android4.2中实现bluetooth A2dp Sink(一)——移植Android5.0蓝牙协议栈

一直以来,Android对于蓝牙的支持都很混乱,简直可以说是一坨shit。各个版本的协议栈都不一样,最早用的是bluez,进入4.x时代之后,换成了谷歌自己的bluedroid。换就换吧,至少等做完了再用吧,结果4.2、4.3、4.4的bluedroid全都不一样。这就对我等非专业蓝牙开发人员开发蓝牙制造了巨大的麻烦。

好了,吐槽到此为止,该说正事了。因为公司在做智能家居项目,需要在Android上实现蓝牙A2dp Sink的profile,这样我们的设备就能当蓝牙音箱来用了。我们是用的平台是全至A20,蓝牙模块是博通的一款bt+wifi的集成模块,sdk的版本是Android4.2。据我们了解,Android4.x的官方sdk中蓝牙A2dp只实现了source,也就是只能作为播放音乐的源,将音频数据传出去。博通自己有支持蓝牙A2dp Sink的协议栈,但是只支持Android4.4的。Realtek在Android4.2的协议栈上实现了A2dp
Sink,但是受制于我们已经生产出去的版本都是使用的博通的模块,realtek这条路只能死心了。正当我们五路可走的时候,好消息来了,Android5.0发布了,而且“据说”是已经实现了A2dp Sink。好吧,那就移植吧。

我会将整个的移植分为如下几个部分进行描述:

1、Android中蓝牙音频系统基础知识;

2、移植蓝牙协议栈;

3、实现蓝牙音频播放;

时间: 2024-10-13 23:29:03

在Android4.2中实现bluetooth A2dp Sink(一)——移植Android5.0蓝牙协议栈的相关文章

在Android4.2中实现bluetooth A2dp Sink(二)——移植Android5.0蓝牙协议栈

在Android中,蓝牙系统的结构如下图所示: 在这个体系结构中,从下往上依次是模块驱动.蓝牙协议栈.Bluetooth.apk.Framework和各种蓝牙应用.其中,内核中的驱动是直接和硬件打交道的,一般由模块厂商提供.Android层中,最下面的是处理具体蓝牙协议的协议栈,里面包含了蓝牙各种profile的具体实现,Bluetooth.apk是蓝牙协议栈和framework之间的纽带,使用jni接口沟通了用java实现的framework和c实现的协议栈,并且实现了状态机来控制各种prof

The Implementation of A2DP Sink in Android 4.4

A2DP Sink was not supported in Android 4.4. We implemented this feature which can be applied in the scenarios below. You can get the code from https://android-review.googlesource.com/#/c/98161/. We tested the solution on Nexus 5. Our solution include

A2DP Sink, AVRCP Controller and HFP Client in Android L

The APIs of A2DP sink, AVRCP controller and HFP client are not published in Android L, but the code which implements the  profiles  is indeed in Android L. You can set the configuration for the car to build the code. Where is the code? A2DP sink /fra

Android4.4中不能发送SD卡就绪广播

当在Android上进行图片的扫描功能开发时一般会使用:sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse(“file://”+ Environment.getExternalStorageDirectory()+ picPath)));的广播. 但是在Android4.4及以上版本中,执行上面的代码出现异常:W/ActivityManager( 498): Permission Denial: not allowed

Android4.4中获取资源路径问题

关于Android4.4的图片路径获取,如果回来的Uri的格式有两种 [java] view plaincopy content://com.android.providers.media.documents/document/image:3951 [java] view plaincopy content://media/external/images/media/3951 出现第一种Uri的操作方式如下图所示: 直接点选最近的图片,应该是Android4.4 特有的Api . 找到了一个更全

Android4.4中拒绝发送Intent.ACTION_MEDIA_MOUNTED扫描SD卡的广播

通常在我们的项目中,可能会遇到写本地文件,最常用的就是图片文件,在这之后需要通知系统重新扫描SD卡,在Android4.4之前也就是以发送一个Action为"Intent.ACTION_MEDIA_MOUNTED"的广播通知执行扫描.如下: this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDir

解决android4.4 中添加Menu的icon时,没有显示的问题

我的Activity是继承了ActionBarActivity,你可以重写你的ActionBarActivity,然后每一个Activity都继承你的BaseActionBarActivity 只需要在Activity里面重写下面的方法即可 @Override public boolean onMenuOpened(int featureId, Menu menu) { if (featureId == Window.FEATURE_ACTION_BAR && menu != null)

Android技术4:Android4.4中如何更新相册信息

当你到这篇文章时,你肯定遇到了在Android4.4版本中需要使用本地相册时,无法找到最新的照片这一问题.在Android4.4以前在需要获取手机本地图片信息时,只需要发送一个广播更新相册信息,然而系统更新到4.4之后该广播无效且报错. 广播如下: sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

Android4.1中BinderService的作用

http://blog.csdn.net/lsdmx2016/article/details/8772583 Android4.1 中出现了一个新的类,BinderService,所有的Native Service 都会继承这个类.class BinderService{public:    static status_t publish(bool allowIsolated = false) {        sp<IServiceManager> sm(defaultServiceMana