关闭

Android 蓝牙

212人阅读 评论(0) 收藏 举报
分类:

概念:

蓝牙( Bluetooth® ):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。蓝牙技术最初由电信巨头爱立信公司于1994年创制,当时是作为RS232数据线的替代方案。蓝牙可连接多个设备,克服了数据同步的难题。

如今蓝牙由蓝牙技术联盟(Bluetooth Special Interest Group,简称SIG)管理。蓝牙技术联盟在全球拥有超过25,000家成员公司,它们分布在电信、计算机、网络、和消费电子等多重领域。IEEE将蓝牙技术列为IEEE 802.15.1,但如今已不再维持该标准。蓝牙技术联盟负责监督蓝牙规范的开发,管理认证项目,并维护商标权益。制造商的设备必须符合蓝牙技术联盟的标准才能以“蓝牙设备”的名义进入市场。蓝牙技术拥有一套专利网络,可发放给符合标准的设备。


操作:

权限

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


一、获取蓝牙


//获取默认的 bluetootAdapter
BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();

    BluetoothAdapter的属性打开时才能够读取和更改(设备启用状态),如果该设备关闭,那么这些方法将返回空。

二、判断设备开起,更改设备信息

 //当蓝牙开启时
           
if(bluetooth.isEnabled()){
               //蓝牙地址
               
String address = bluetooth.getAddress();
               
//蓝牙名称
               
String name = bluetooth.getName();
               
Toast.makeText(this,"Address:"+address+" name:"+name,Toast.LENGTH_LONG).show();
               
//蓝牙设备开启时并且添加 BLUETOOTH_ADMIN 权限 可以对蓝牙进行名称设定
//                bluetooth.setName("挖掘机哪家强");
               //扫描蓝牙设备
               
blueToothScan();
           
}else{
               //当蓝牙未开启时
               
Toast.makeText(this,"蓝牙未开启",Toast.LENGTH_LONG).show();
               
//弹出提示用户打开蓝牙
               
startActivityForResult(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), START_BLUETOOTH);
           
}

   打开返回

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);

   
//打开蓝牙返回
   
if(requestCode== START_BLUETOOTH &&resultCode==RESULT_OK){
      Toast.makeText(this,"打开蓝牙",Toast.LENGTH_SHORT).show();
   
}  
}

 三、注册打开蓝牙广播

//注册蓝牙打开广播
registerReceiver(bluetoothState,new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));
/**
    * 创建蓝牙监听广播
    */

   
BroadcastReceiver bluetoothState = new BroadcastReceiver() {
       @Override
       
public void onReceive(Context context, Intent intent) {

           int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
           int
previousState = intent.getIntExtra( BluetoothAdapter.EXTRA_PREVIOUS_STATE, -1);

//            int state = bluetooth.getState();
           
switch (state){
               case BluetoothAdapter.STATE_TURNING_ON:
                   //打开中
                   
break;
               case
BluetoothAdapter.STATE_ON:
                   //已打开
                   
break;
               case
BluetoothAdapter.STATE_TURNING_OFF:
                   //关闭中
                   
break;
               case
BluetoothAdapter.STATE_OFF:
                   //已关闭
                   
break;
           
}
       }
   };


四、注册可被扫描广播

//注册可被扫描广播
registerReceiver(bluetoothScan,new IntentFilter(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED));

//扫描状态广播
BroadcastReceiver bluetoothScan=new BroadcastReceiver() {
   @Override
   
public void onReceive(Context context, Intent intent) {
       int prevMode = intent.getIntExtra(BluetoothAdapter.EXTRA_PREVIOUS_SCAN_MODE, -1);
       int
scanMode = intent.getIntExtra(BluetoothAdapter.EXTRA_SCAN_MODE, -1);

       switch
(scanMode){
           case BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE:
               //启用查询扫描和页面扫描,意味着该设备可被任何执行发现扫描的蓝牙设备发现
               
break;
           case
BluetoothAdapter.SCAN_MODE_CONNECTABLE:
               //启用页面扫描但禁用查询扫描。这意味着之前连接并绑定到本地设备的设备可以在发现过程中找到,但找不到新设备
               
break;
           case
BluetoothAdapter.SCAN_MODE_NONE:
               //可发现性被关闭,再发现过程中没有一个远程设备能够找到本地设备
               
break;
       
}
   }
};
/**
* 开始扫描
*/
private void blueToothScan(){
   int scanMode = bluetooth.getScanMode();
   if
(scanMode==BluetoothAdapter.SCAN_MODE_NONE){
       //设置设备可以被发现
       
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
       
//设置可发现时间
       
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,60);
       
startActivityForResult(intent, START_DISCOVERABLE);
   
}else{
       //是否正在扫描,正在扫描取消扫描
       
mDeviceAdapter.clearDevice();
       if
(!bluetooth.isDiscovering()){
          bluetooth.startDiscovery();
       
}else{
           //停止扫描
           
bluetooth.cancelDiscovery();
           
//开始扫描
           
bluetooth.startDiscovery();
       
}
   }
}

五、注册开始扫描和结束扫描广播

//注册扫描开始
registerReceiver(discoveryMonitor,new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED));
//注册扫描结束
registerReceiver(discoveryMonitor,new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED));
BroadcastReceiver discoveryMonitor = new BroadcastReceiver() {
   @Override
   
public void onReceive(Context context, Intent intent) {
       if(BluetoothAdapter.ACTION_DISCOVERY_STARTED==intent.getAction()){
           Log.i(TAG,"开始扫描 start");
       
}else if(BluetoothAdapter.ACTION_DISCOVERY_FINISHED==intent.getAction()){
           Log.i(TAG,"结束扫描 finish");
       
}
   }
};

六、注册设备扫描结果

//注册设备扫描结果
registerReceiver(discoveryResult,new IntentFilter(BluetoothDevice.ACTION_FOUND));
//扫描结果
BroadcastReceiver discoveryResult = new BroadcastReceiver() {
   @Override
   
public void onReceive(Context context, Intent intent) {
       //名称
       
String remoteName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
       
//设备
       
BluetoothDevice remoteDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
       
mDeviceAdapter.addDevice(remoteDevice);
   
}
}

七、退出时unRegisterReceiver

@Override
protected void onDestroy() {
   unregisterReceiver(bluetoothState);
   
unregisterReceiver(bluetoothScan);
   
unregisterReceiver(discoveryMonitor);
   
unregisterReceiver(discoveryResult);
   super
.onDestroy();
}

0
0
查看评论

Android蓝牙开发之一:打开、关闭蓝牙

转载地址:http://victorzhong.github.io/2015/07/26/Android%E8%93%9D%E7%89%99%E5%BC%80%E5%8F%91%E4%B9%8B%E4%B8%80%EF%BC%9A%E6%89%93%E5%BC%80%E3%80%81%E5%85%B...
  • luisliuyi
  • luisliuyi
  • 2016-04-19 20:47
  • 9904

android bluetooth——蓝牙的开启、搜索、配对与连接

android 的blt仅仅支持api 18 android4.3以上,有的功能甚至需要api 19 android4.4; 所以我们在做blt项目之前一定要清楚可用的版本范围。我要讲述的是打开blt大门的操作。这些操作就是如何打开blt、如何搜索到其他设备、如何配对选中设备、如何通过mac地址连...
  • yehui928186846
  • yehui928186846
  • 2016-09-30 12:18
  • 30065

Android 6.0蓝牙权限问题

Android 6.0 动态权限申请注意事项 Android中蓝牙的基本使用—-BluetoothAdapter类简介Android:Bluetooth 的打开和关闭通过查找资料发现原来是在android 6.0之后要用蓝牙还需要添加一个模糊定位的权限android.permission.ACCES...
  • lhb_11
  • lhb_11
  • 2017-06-24 17:30
  • 671

Android 蓝牙开发,蓝牙连打印机。

以Gprinter佳博打印机为例,从蓝牙到打印。很简单的 >_ demo环境:as3.0。文末附github地址。 1、去官网下载安卓版SDK,解压并开始配置 app目录下新建libs文件夹,拷入jar包并add as library,具体如图 然后main文件夹目录下新建ai...
  • yechaoa
  • yechaoa
  • 2017-11-29 17:18
  • 1386

android蓝牙主动发起配对实例

转自:http://wiley.iteye.com/blog/1179417 package cn.madfinger.core;      import java.io.IOException;   ...
  • gf771115
  • gf771115
  • 2014-07-22 22:28
  • 21010

Android开发之蓝牙详解(一)

一.概述这篇文章是我学习Android开发官网以及网上一些其他文章总结而来,主要就是为了好好研究一下蓝牙开发,看完这篇文章以后,我们就知道了怎样使用蓝牙API完成建立蓝牙连接的必要四步:1.打开蓝牙;2.查找附近已配对或可用的设备;3.连接设备;4.设备间数据交换。由于文章比较长,为了方便大家的学习...
  • Small_Lee
  • Small_Lee
  • 2016-03-04 10:34
  • 11404

Android 蓝牙音箱开发

项目下载地址github:1.打开蓝牙: mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); /**如果本地蓝牙没有开启,则开启*/ if (!mBluetoothAdapter.isEnabled()) { // 我们...
  • u012987546
  • u012987546
  • 2016-08-14 15:16
  • 3742

Android4.2蓝牙基础架构学习

接下来就要进入到真正的Android4.2蓝牙系统的学习了,Are you ready? 概述 本文不会涉及任何代码,主要对整个Android的蓝牙结构进行一个框架上的分析。 Android4.2使用了Bluetooth.apk管理所有蓝牙相关的操作,Bluedroid作为蓝牙协议栈。整个蓝牙的...
  • yutao52shi
  • yutao52shi
  • 2013-10-13 23:58
  • 11307

Android Ble 4.0 蓝牙开发交互

产品需求:1、app通过蓝牙连接到板子设备                    2、以发报文的形式与板子设备通讯 ...
  • Lucy__
  • Lucy__
  • 2017-03-20 12:07
  • 3739

Android ----蓝牙架构

蓝牙: 1、fromwork 2、service 3、driver Bluetooth.apkbluedroid(芯片厂家) fromwork到service直接调用 service到driver利用service调用 fromwork到dr...
  • u012309611
  • u012309611
  • 2017-01-22 10:40
  • 700
    个人资料
    • 访问:18238次
    • 积分:405
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:12篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论