文档章节

Android之蓝牙操作

 杨勇汉
发布于 2015/02/01 14:03
字数 891
阅读 94
收藏 0

1、什么是蓝牙

Bluetooth是目前是使用的最广泛的无线通讯协议之一;
主要针对短距离设置通讯;5到10米
常用语连接耳机、鼠标和移动通讯设备等;


与蓝牙相关的api:
BluetoothAdapter:该类的对象代表了本地的蓝牙适配器;

BluetoothAdapter的常用方法:

 isEnabled()判断蓝牙是否打开,已打开返回true,否则,返回false

getAddress()获取本地蓝牙地址

 getName()获取本地蓝牙名称

startDiscovery()开始搜索,这是搜索的第一步

isDiscovering()判断当前是否正在查找设备,是返回true

getState()获取本地蓝牙适配器当前状态(感觉可能调试的时候更需要)

getDefaultAdapter()获取默认BluetoothAdapter,实际上,也只有这一种方法获取BluetoothAdapter

getRemoteDevice(String address)根据蓝牙地址获取远程蓝牙设备

getBondedDevices()得到所有已经配对的蓝牙适配器对象

disable()关闭蓝牙
enable()打开蓝牙,这个方法打开蓝牙不会弹出提示;

更多的时候我们需要问下用户是否打开,这两行代码同样是打开蓝牙,不过会提示用户:

//创建一个intent对象,该对象用于启动一个Activity,提示用户开户蓝牙设备
Intent intent=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(intent);
BluetoothDevice:代表了一个远程的Bluetooth设备;

常用方法:getAddress(),getName(),同BluetoothAdapter


要蓝牙设备必须在AndroidManifest.xml声明蓝牙权限:
<uses-permission android:name="android.permission.BLUETOOTH"/>

2、修改本机蓝牙设备的可见性

在AndroidManifest.xml声明蓝牙权限:

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

下面是一个小案例,可以:打开蓝牙,修改蓝牙设备可见性,扫描可配对的蓝牙设备;main.xml文件就三个按扭在此不再给出,直接看BluetoothActivity.java文件

public class BluetoothActivity extends Activity {
	private Button button1,button2,button3;
	BluetoothAdapter bluetoothAdapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button1=(Button) findViewById(R.id.button1);
        button2=(Button)findViewById(R.id.button2);
        button3=(Button)findViewById(R.id.button3);
        //创建一个IntentFilter对象,将其action指定的BlueToothDevice.ACTION_FOUD
        IntentFilter intentFilter=new IntentFilter(BluetoothDevice.ACTION_FOUND);
        BluetoothReceiver bluetoothReceiver=new BluetoothReceiver();
        //注册广播接收器
        registerReceiver(bluetoothReceiver,intentFilter);
        bluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
        
        //打开蓝牙
        button1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				//得到BluuetoothAdapter对象
				BluetoothAdapter adapter=BluetoothAdapter.getDefaultAdapter();
				//判断BluetoothAdapter对象是否为空,如果为空,则表明本机没有蓝牙设备
				if(adapter!=null){
					System.out.println("本机拥有蓝牙设备");
					//调用isEnabled()方法,判断当前蓝牙设备是否可用
					if(!adapter.isEnabled()){
						//创建一个intent对象,该对象用于启动一个Activity,提示用户开户蓝牙设备
						Intent intent=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
						startActivity(intent);	
					}
					//得到所有已经配对的蓝牙适配器对象
					Set<BluetoothDevice> devices=adapter.getBondedDevices();
					if(devices.size()>0){
						for(Iterator iterator=devices.iterator();iterator.hasNext();){
							BluetoothDevice bluetoothDevice=(BluetoothDevice) iterator.next();
							//得到远程蓝牙设备的地址
							System.out.println(bluetoothDevice.getAddress());
						}
					}
				}else{
					System.out.println("没有蓝牙设备");
				}
			}
		});
        //该监听器用于修改蓝牙设备可见性
        button2.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				 // 创建一个Intent对象,并将其action的值设置为BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE
				Intent discoverableIntent=new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
				//将一个键值对存放到Intent对象当中,主要用于指定可见状态的持续时间
				discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 500);
				startActivity(discoverableIntent);
			}
		});
        //扫描可配对的蓝牙设备
        button3.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				bluetoothAdapter.startDiscovery();
			}
		});
    }
	private class BluetoothReceiver extends BroadcastReceiver{
    	
		@Override
		public void onReceive(Context context, Intent intent) {
			String action=intent.getAction();
			if(BluetoothDevice.ACTION_FOUND.equals(action)){
				//可以从收到的Intent对象当中,将代表远程蓝牙适配器的对象取出
				BluetoothDevice device=intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
				System.out.println(device.getAddress());
			}
		}
    }
}
在做之前必须要一个android手机有蓝牙的,还有一台电脑有蓝牙的,否则不成功,
还有别忘了在 AndroidManifest.xml声明蓝牙权限:

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



本文转载自:http://blog.csdn.net/rhljiayou/article/details/7306327

粉丝 2
博文 69
码字总数 0
作品 0
东城
私信 提问
android -------- 蓝牙Bluetooth

什么是蓝牙? 也可以说是蓝牙技术。所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,是由爱立信公司公司发明的。利用“蓝牙”技术,能够有效地简化掌上电脑、笔记本电脑和移动电话手...

切切歆语
2018/04/17
85
0
Android深入浅出系列之Bluetooth—蓝牙操作(一)

  一:什么是蓝牙     1:Bluetooth是目前使用最广泛的无线通讯协议,近距离无线通讯的标准。传说瑞典有个国王特别爱吃蓝莓导致自己的牙齿天天都是蓝色的,在他执政期间这位国王非常善...

芋头被人用掉了
2015/05/19
198
0
Android源码分析(六)-----蓝牙Bluetooth源码目录分析

一 :Bluetooth 的设置应用 packagesappsSettingssrccomandroidsettingsbluetooth* 蓝牙设置应用及设置参数,蓝牙状态,蓝牙设备等。 BluetoothDevicePreference.java 顾名思义,蓝牙设备首选...

—莫言—
05/20
0
0
Android8.0 蓝牙系统

Android 提供支持经典蓝牙和蓝牙低功耗的默认蓝牙堆栈。借助蓝牙,Android 设备可以创建个人区域网络,以便通过附近的蓝牙设备发送和接收数据,在 Android 4.3 及更高版本中,Android 蓝牙堆...

天王盖地虎626
01/08
280
0
Android ble peripheral 连接后自动断开

使用android手机作为蓝牙4.0的外围设备,用iOS上的lightblue进行测试; 能正常扫描到android的蓝牙,但一连接马上就断开了,根据log确实是连接成功后再断开的,但我没有进行断开连接的操作啊...

大明东北虎
2016/08/15
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部