好记性不如烂笔头,既然不够聪明,就乖乖的做笔记,温故而知新。公司一代产品用的经典蓝牙通信,特点就是基于socket连接,传输速率快,缺点就是,额,,,耗电!虽然已经被取代了?,但还是记录一下经典蓝牙通信基本原理缅怀一下吧。
好了,全军出击!
蓝牙权限
蓝牙权限不属于危险权限,所以写在清单文件即可,Android6.0不需要动态申请。但是搜索周边蓝牙设备是需要定位权限的,而且要求gps打开。
<uses-permission android:name="android.permission.BLUETOOTH" />允许程序连接到已配对的蓝牙设备。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
初始化蓝牙
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (null == mBluetoothAdapter) {
Toast.makeText(this.getApplicationContext(), R.string.not_support_bluetooth, Toast.LENGTH_SHORT).show();
return;
}
开启蓝牙
if(!mBluetoothAdapter.isEnabled()){
Toast.makeText(MainActivity.this, getString(R.string.open_bluetooth), 2000).show();
return;
}
或者
mBluetoothAdapter.enable()
搜索蓝牙
mBluetoothAdapter.startDiscovery();
//TODO:搜索蓝牙之前需要判断定位权限和GPS开关 MIUI权限需要定制处理
if (PermissionUtil.getInstance().checkGPSPermission(MainActivity.this)) { if (!AppUtil.isGpsOPen(MainActivity.this) && PermissionUtil.getInstance().isOverMarshmallow()) { permissionDialog = new PermissionDialog(MainActivity.this, R.style.Dialog); permissionDialog.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { permissionDialog.setTvContent(getResources().getString(R.string.forbid_tip_gps_open)); permissionDialog.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //跳转GPS设置界面 Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);