Android蓝牙初级一
2016-04-22 16:24
441 查看
Android蓝牙的开启,收索,Socket连接(据说不需要配对就可以连接,测试中…)
一,权限
二,开启蓝牙
进入代码之前这里先定义一些基本的对象,后面代码会使用
正式开启蓝牙设备
三,收索蓝牙
本来开始收索蓝牙只需要下面这行代码就OK了,
但是在时间的使用中可以添加一些判断,这样效果会更好些。如下面这种写法。
收索的结果系统会通过广播发送出来,所以编写相应的广播接收器来监听收索结果。
使用中要调用register方法进行注册。
四,Socket连接见下节分析
一,权限
//使用蓝牙设备权限 <uses-permission android:name="android.permission.BLUETOOTH" /> //蓝牙设备管理员权限(开启蓝牙时可以不显示弹框) <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
二,开启蓝牙
进入代码之前这里先定义一些基本的对象,后面代码会使用
//蓝牙适配器对象,提供开启,关闭蓝牙以及收索设备等相关接口 private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); //已配对设备列表 private ArrayList<BluetoothDevice> mPairedDevices = new ArrayList<>(); //当前能收索到的设备列表 private ArrayList<BluetoothDevice> mNewDevices = new ArrayList<>();
正式开启蓝牙设备
/** * 开启蓝牙设备 */ public boolean open() { if (!mBluetoothAdapter.isEnabled()) { return mBluetoothAdapter.enable(); } else { return true; } }
三,收索蓝牙
本来开始收索蓝牙只需要下面这行代码就OK了,
mBluetoothAdapter.startDiscovery();
但是在时间的使用中可以添加一些判断,这样效果会更好些。如下面这种写法。
/**
* 开始收索蓝牙设备
* 系统异步方法,收索到的设备信息将会在BroadcastReceiver 中返回
*
* 建议放在子线程中运行该代码
*/
public void startDiscovery() {
if (mBluetoothAdapter.isDiscovering()) {
mBluetoothAdapter.cancelDiscovery();
}
while (!mBluetoothAdapter.startDiscovery()) {
mNewDevices.clear();
mBluetoothAdapter.startDiscovery();try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
收索的结果系统会通过广播发送出来,所以编写相应的广播接收器来监听收索结果。
BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); //找到设备 if (BluetoothDevice.ACTION_FOUND.equals(action)) { Log.v("tag", "find one"); BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); if (device.getBondState() != BluetoothDevice.BOND_BONDED) { Log.v("tag", "find device:" + device.getName() + device.getAddress()); mNewDevices.add(device); } } //搜索完成 else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { Log.v("tag", "find over :" + mNewDevices.size()); if (mNewDevices.size() == 0) { Log.v("tag", "find over but can not find anyone"); } } } }; private void register() { IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); mContext.registerReceiver(mReceiver, filter); filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); mContext.registerReceiver(mReceiver, filter); }
使用中要调用register方法进行注册。
四,Socket连接见下节分析
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析