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"/>