enable –打开蓝牙

public boolean enable() {

android.util.SeempLog.record(56);

if (isEnabled()) {

if (DBG) Log.d(TAG, "enable(): BT already enabled!");

return true;

}

try {

return mManagerService.enable(ActivityThread.currentPackageName());

} catch (RemoteException e) {Log.e(TAG, "", e);}

return false;

}

1、App通过BluetoothAdapter调用enable接口

2、在BluetoothAdapter 的getDefaultAdapter 中获取BluetoothManagerService服务客户端的代理对象managerService

IBinder b = ServiceManager.getService(BLUETOOTH_MANAGER_SERVICE);

if (b != null) {

IBluetoothManager managerService = IBluetoothManager.Stub.asInterface(b);//获得bind proxy

sAdapter = new BluetoothAdapter(managerService);

} else {

Log.e(TAG, "Bluetooth binder is null");

}

3、通过managerServiceregiserAdapter获取AdapterService服务的客户端代理对象mService

private IBluetooth mService;

BluetoothAdapter(IBluetoothManager managerService) {

if (managerService == null) {

throw new IllegalArgumentException("bluetooth manager service is null");

}

try {

mServiceLock.writeLock().lock();

mService = managerService.registerAdapter(mManagerCallback);//IBluetooth proxy

} catch (RemoteException e) {

Log.e(TAG, "", e);

} finally {

mServiceLock.writeLock().unlock();

}

mManagerService = managerService;

mLeScanClients = new HashMap<LeScanCallback, ScanCallback>();

mToken = new Binder();

}

4、服务连接的时候获取AdapterService的客户端代理对象mBluetooth

private class BluetoothServiceConnection implements ServiceConnection {

public void onServiceConnected(ComponentName componentName, IBinder service) {

String name = componentName.getClassName();

if (DBG) Slog.d(TAG, "BluetoothServiceConnection: " + name);

Message msg = mHandler.obtainMessage(MESSAGE_BLUETOOTH_SERVICE_CONNECTED);

if (name.equals("com.android.bluetooth.btservice.AdapterService")) {

msg.arg1 = SERVICE_IBLUETOOTH;

} else if (name.equals("com.android.bluetooth.gatt.GattService")) {

msg.arg1 = SERVICE_IBLUETOOTHGATT;

} else {

Slog.e(TAG, "Unknown service connected: " + name);

return;

}

msg.obj = service;

 mHandler.sendMessage(msg);

}

case MESSAGE_BLUETOOTH_SERVICE_CONNECTED:

{

if (DBG) Slog.d(TAG,"MESSAGE_BLUETOOTH_SERVICE_CONNECTED: " + msg.arg1);

IBinder service = (IBinder) msg.obj;

mBluetoothBinder = service;

 mBluetooth = IBluetooth.Stub.asInterface(Binder.allowBlocking(service));

AdapterService –enable

打开蓝牙之前,先启动并初始化GattService。等GattService启动成功后发送BLE_STARTED消息,

然后在调用enableNative去打开蓝牙。

android-adapterservice相关推荐

  1. Android 蓝牙启动流程(以及设置蓝牙为作为sink模式 接收端模式)

    本文以Android 7.1为基础 最近在做蓝牙开发,研究了一下蓝牙的启动流程,总结一下 Google在Android源码中推出了它和博通公司一起开发的BlueDroid以替代BlueZ.BlueZ的 ...

  2. android -- 蓝牙 bluetooth (二) 打开蓝牙

    4.2的蓝牙打开流程这一部分还是有些变化的,从界面上看蓝牙开关就是设置settings里那个switch开关,widget开关当然也可以,起点不同而已,后续的流程是一样的.先来看systemServe ...

  3. android蓝牙设置名称流程,Android 8 设置蓝牙名称 流程

    记录android 8设置蓝牙名称的流程.java packages/apps/Settings/src/com/android/settings/bluetooth/BluetoothDeviceR ...

  4. Android 打开蓝牙流程

    以下是基于Android 4.2代码,对Bluetooth BR/EDR Enable process的分析.BluetoothAdapter类代表的是local device Bluetooth a ...

  5. Android BlueDroid(三):BlueDroid蓝牙开启过程enable

    转自:http://blog.csdn.net/xubin341719/article/details/40402637 一.enableNative函数的的实现 (1).初始化BTE: (2).创建 ...

  6. Android蓝牙打印服务,Android 模拟蓝牙打印机

    1: 思路 百度百科的介绍 所谓蓝牙打印机,就是指在主机端用一单片机来仿真打印机进行工作,截取从主机并口传出的数据及控制信号,并通过蓝牙无线连接传送到打印机端.在打印机侧的单片机则根据所收到的蓝牙数据 ...

  7. android蓝牙浅析

    转载 地址:http://blog.csdn.net/baimy1985/article/details/8892410 前段时间在 网上看了一些关于Android蓝牙的文章,发现大部分是基于老版本( ...

  8. android -- 蓝牙 bluetooth解读

    入手一个新的模块或应用,当然首先要知道它都有什么了,与它相关的代码在那里,所以先一起看下蓝牙代码分布吧. 1. 代码分布: packages/apps/Bluetooth/ 看这路径肯定是蓝牙应用方面 ...

  9. android -- 蓝牙 bluetooth (一) 入门

    android -- 蓝牙 bluetooth (一) 入门 分类: Android的原生应用分析 2013-05-19 21:44 19998人阅读 评论(42) 收藏 举报 bluetooth4. ...

  10. android系统源码学习 -- 蓝牙 bluetooth (一) 入门

    原文地址:http://blog.csdn.net/baimy1985/article/details/8892410 1. 代码分布: packages/apps/Bluetooth/ 看这路径肯定 ...

最新文章

  1. 虚拟化的故事连载系列一
  2. Unity技术专家:游戏最重要的是好玩而不是高画质...
  3. Node Sass does not yet support your current environment
  4. java xstream jar_Java库使用----xstream1.3.1
  5. 突然挂了!Redis 缓存都在内存中,这下完了!
  6. windows server 2008 各版本下载
  7. android 电脑 手柄游戏排行榜,各类吃鸡安卓模拟器测评排行,电脑玩手机游戏哪家强?...
  8. 微信抢红包插件 English Version
  9. 看单片机原理图-外部FLASHW25Q64
  10. 解决:error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“
  11. TPM管理解决制造型企业成本大问题的常用手段
  12. win 10 读写EFI分区
  13. 透明图片怎么发给别人_苹果实况图片怎么发给别人
  14. python json库安装_python-安装simplejson后没有名为“ json”的模块
  15. C++定时器CTimer的实现
  16. Android 距离传感器修复 修复打电话黑屏 无法快速唤醒屏幕的BUG
  17. 如何排查CPU 100%的应用
  18. 达内Web前端开发视频教程
  19. Docker 搭建 Jenkins 流水线项目配置
  20. Xilinx伪双口RAM实现同步FIFO(解决读写冲突)

热门文章

  1. unity 微信支付
  2. 规模破万亿,助力支付发展丨在线旅游市场你不知道的那些事
  3. 划线高亮和插入笔记的技术实现
  4. flowable流程引擎基础概念总结
  5. Ansible的task执行方式控制:forks以及serial
  6. 【我是小白】感谢大家的关注
  7. 基于C语言设计的学籍管理系统
  8. 什么是“软件定义汽车”
  9. RESTful HTTP中对POST,PUT,PATCH的区别
  10. Oracle环境变量NLS_LANG