Android 蓝牙的常用操作

最近对Android设备的蓝牙操作进行了一些研究, 下面做一些总结, 版本是4.4,列出的解决方案多来源于网络,感谢强大的网友们:

操作蓝牙可以分为常规的操作,和非常规的操作。所谓常规的操作,就是界面上有提示,需要客户许可进行的一些操作。非常规的则通常是采用反射等手段,达到不知不觉连接蓝牙的目的。

一. 常规操作:

1. 获取蓝牙的操作接口:

BluetoothAdapter mBtAdapter = BluetoothAdapter.getDefaultAdapter();

蓝牙的相关操作基本都是通过上面这个类。

2. 打开本机的蓝牙设备:

if (!mBtAdapter.isEnabled()) {
  Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
  startActivityForResult(enableIntent, 0);
}

3. 打开蓝牙的可见性:


if (mBtAdapter.isEnabled()) {
  Intent visibleIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
  visibleIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);  // 后面的ms最多就是300
  startActivity(visibleIntent);
}

4. 开启了蓝牙设备,就是为了与其他设备通信,所以需要扫描周围可用的设备:

// 注册两个intent,并定义receiver接受蓝牙设备检测过程中,"发现设备"和"完成"的回调事件
IntentFilter discoveryFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);IntentFilter discoveryFinishedFilter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);BroadcastReceiver discoverReceiver = new BroadcastReceiver() {    @Override    public void onReceive(Context context, Intent intent) {        String action = intent.getAction();        if (BluetoothDevice.ACTION_FOUND.equals(action))      {        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);  // 拿到别的device才能进行连接操作     }         else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action))         {         // DO Something        }    }};this.registerReceiver(discoverReceiver, discoveryFilter);this.registerReceiver(discoverReceiver, discoveryFinishedFilter);
/************************************/

mBtAdapter.startDiscovery();    // 用来开始搜索周围可见的蓝牙设备

// 如果在发现过程中想要停止,可以调用下面的API
if(mBtAdapter.isDiscovering())
{
    mBtAdapter.cancelDiscovery();
    return;
}

5. 作为server端,等待其他设备连接:

BluetoothServerSocket mServerSocket = mBtAdapter.listenUsingRfcommWithServiceRecord(PROTOCOL_SCHEME_RFCOMM, UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));BluetoothSocket mClientSocket = mServerSocket.accept();

// 有了socket对象,可以获取stream了, 可以用stream的read,write方法来读写数据了,read可以在独立线程的循环里,以保证持续接受到数据。InputStream inStream = mClientSocket.getInputStream();OutputStream outStream = mClientSocket.getOutputStream();

6. 作为client端,可以去连接server:

BluetoothDevice mDevice = mBtAdapter.getRemoteDevice(device.getAddress());   //首先要获得server的设备对象,这个兑现可以在之前 discover的时候就拿到,也可以通过之前记录的address获取到

// connect 如果成功了,就得到socket连接了,之后和上面一样,就可以通过stream进而收发消息了mClientSocket = mDevice.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));mClientSocket.connect();

二. 非常规操作:

1. 打开本机的蓝牙设备:

// 这样是不会弹出对话框的if (!mBtAdapter.isEnabled()) {
  mBtAdapter.enable();
}

2. 打开蓝牙的可见性:

  //值得一提的是,这个方法在 mBtAdapter.enable(); 之后立即调用是很有可能不生效的。可能是蓝牙设备开启需要一些时间。所以,最好是在确认设备确实已经开启了之后(比如说sleep一会儿,或者有个有个循环不断check mBtAdapter.isEnabled  (),来保证设备已经准备好了。    public void setDiscoverableTimeout(int timeout) {

     try {
          Method setDiscoverableTimeout = BluetoothAdapter.class.getMethod("setDiscoverableTimeout", int.class);
            setDiscoverableTimeout.setAccessible(true);
            Method setScanMode =BluetoothAdapter.class.getMethod("setScanMode", int.class,int.class);
            setScanMode.setAccessible(true);

            setDiscoverableTimeout.invoke(mBtAdapter, timeout);
            setScanMode.invoke(mBtAdapter, BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE,timeout);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

3. 不配对就进行蓝牙通信:

// 通过这两个API, 可以很神奇的, 不配对蓝牙设备就进行通信mServerSocket = mBtAdapter.listenUsingInsecureRfcommWithServiceRecord(PROTOCOL_SCHEME_RFCOMM, UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));mClientSocket = mDevice.createInsecureRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));

三. 最后列一下需要的权限:

    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

蓝牙参考网页:

http://stackoverflow.com/questions/5308373/how-to-create-insecure-rfcomm-socket-in-android

http://stackoverflow.com/questions/5885438/bluetooth-pairing-without-user-confirmation

http://blog.csdn.net/zshq280017423/article/details/7645622

http://blog.csdn.net/menghnhhuan/article/details/7057484

http://blog.csdn.net/eric41050808/article/details/16967189

http://www.2cto.com/kf/201312/261093.html

WIFI 参考网页:

http://blog.csdn.net/ranger1111/article/details/6777153

http://lszdb1983.blog.163.com/blog/static/20426348201209251344/

格式啊,怎么也搞不好,,,

时间: 2024-08-26 11:30:18

Android 蓝牙的常用操作的相关文章

Android 蓝牙模块基础操作

之前没怎么接触过蓝牙模块,在学习的过程中借鉴了很多前辈的经验.本次主要包含以下功能: 1.检测是否存在蓝牙模块 2.蓝牙的开启与关闭 3.与本机已配对的蓝牙设备 4.本机蓝牙可见性设置 5.扫描周围蓝牙设备 关于蓝牙设备之间如何通讯下次再整理.下面开始介绍. 1.1.首先要在配置文件中加入操作蓝牙的权限 <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission and

Android Studio常用操作技巧

这段时间一直在用Android Studio做一些Demo的开发,一开始从Eclipse中转向这个开发工具,各种不适应,希望此博文可以一直更新,还有网友可以分享出自己方便更好更快开发的一些技巧. 首先我讲一些经常用到的快捷键吧,网上很多都只说一个大概,很模糊,也不知道什么时候才会用到.我们尽量让这篇博文有作用而不是纯粹的Copy吧! 虽然说Android Studio可以直接一键把所有快捷键设置成Eclipse的快捷键,但是想到你身边的同事,有可能不一定会设置成Eclipse,这样有的时候你如果

Android蓝牙操作笔记(转)

蓝牙是一种支持设备短距离传输数据的无线技术.android在2.0以后提供了这方面的支持. 从查找蓝牙设备到能够相互通信要经过几个基本步骤(本机做为服务器): 1.设置权限 在manifest中配置 <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN&qu

Android 蓝牙

转自:http://www.eoeandroid.com/thread-18993-7-1.html 对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Android的蓝牙开发,国内的例子很少     Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发,刚巧这段时间公司有蓝牙开发的需求,我看了很多国内.国外的资料,又研究了一下J2ME的蓝牙开发(为了找找思路),虽然我想要的功能还没实现(我曾经在很多论坛里问了很多遍,苦

[Android]蓝牙相关接口及方法

首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限 <uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permissionandroid:name="android.permission.BLUETOOTH" /> 然后,看下api,Android所有关于蓝牙开发的类都在android.bluetooth包下,共有8个类

[Android]蓝牙系统

1.1 蓝牙技术简介 蓝牙(Bleuetooth)原是十世纪统一了丹麦的一个国王的名字,现取其"统一"的含义,用来意在统一无线局域网通讯的标准的蓝牙技术.蓝牙技 术是爱立信,IBM,Intel等世界5家著名大公司在1998年联合推出的一项无线通讯规范.随后成立的蓝牙技术特殊兴趣组织(SIG)来负责该技术的 开发和技术协议的制定,如今全世界已有1800多家公司加盟该组织,最近微软公司也正式加盟并成为SIG组织的领导成员之一.它以低成本的近距离无线连接 为基础,为移动通信设备建立一个短程无

Android 蓝牙开发

此例子基于 Android demo 对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Android的蓝牙开发,国内的例子很少     Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发:    鉴于很多开发人员现在也有蓝牙开发的需求,也为了大家少走些弯路,先将我积攒的一点点在Android蓝牙开发经验与大家分享一下! 首先,要操作蓝牙,先要在AndroidManifest.xml里加入权限 <uses-permis

android -- 蓝牙 bluetooth (四)OPP文件传输

在前面android -- 蓝牙 bluetooth (一) 入门文章结尾中提到了会按四个方面来写这系列的文章,前面已写了蓝牙打开和蓝牙搜索,这次一起来看下蓝牙文件分享的流程,也就是蓝牙应用opp目录下的代码,作为蓝牙最基本的一个功能,这部分的代码在之前的版本中就已经有了,新旧版本代码对比很多类名都是一样的,这一部分新东西不多,写在这里帮助大家梳理下流程吧. 有没有这种感觉,智能手机的普及让我们提高了一点对蓝牙的关注,手机间使用蓝牙互传文件应该是最常用的应用之一,手机与电脑也可以通过蓝牙做同样的

Android 蓝牙开发之搜索、配对、连接、通信大全

        蓝牙( Bluetooth®):是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据 交换(使用2.4-2.485GHz的ISM波段的UHF无线电波).蓝牙设备最多可以同时和7个其它蓝牙设备建立连接,进 行通信,当然并不是每一个蓝牙都可以达到最大值.下面,我们从蓝牙的基本概念开始,一步一步开始了解蓝牙. 基本概念: 安卓平台提供对蓝牙的通讯栈的支持,允许设别和其他的设备进行无线传输数据.应用程序层通过安卓API来调用蓝牙的相关功 能,这些API使程序无线连接