在上一篇文章中我们详细介绍了蓝牙打开过程中,jni之上的各个方方面面,应该说涉及到的地方全部讲清楚了,从这一章开始就来讲解一下打开过程到了jni之下都做了些什么。
为什么取名为偷偷摸摸,因为从这里往下在互联网上就基本找不到任何资料了,大家都是凭借函数的名字去猜测一下做了一些什么,然后继续回到jni之上去分析了。然而仅了解那些明面上的东西对我们分析蓝牙来说显然是不够的,我们必须要一探究竟,看看jni之下都偷偷摸摸做了些什么。
这一章节我们将从这几个方面来分析:
1)Service Record的创建
2)enable native
3)profile的使能
本篇博文将会主要分析第一点:Service Record的创建。
1、ServiceRecord的创建
Service Record通俗一点来讲就是用来保存我们所支持service的一个记录。他是用来为SDP服务的,所谓的SDP就是Service Discovery Profile,从名字上可以看到就是用来发现支持哪些服务的Profile。那这些在具体的应用中有什么作用呢?
举一个例子,比如说我想通过蓝牙发送一个文件给对方的设备,可是我怎么知道对方能不能接收文件呢,我总不能从手机上发送一个文件给蓝牙耳机吧。所以,需要我们在配对的时候知道对方支持不支持文件的接收,这就是通过SDP来获知的,而对方所支持的内容(比如说接收文件的能力,我们称之为opp)就是保存在它的Service Record中的。
通过上面的例子,我们也就不难理解为什么Service Record需要在蓝牙打开的过程中创建了。好了,废话不多说,我们直接去看关于service Record,代码中是如何实现的。
1.1、jni中addReservedServiceRecordsNative的分析
基本这个函数就是调用AddReservedServiceRecords的dbus函数,然后根据reply来返回hanles。
static jintArray addReservedServiceRecordsNative(JNIEnv *env, jobject object,