1.官方网址 https://developer.android.com/guide/topics/connectivity/bluetooth.html

2.步骤

首先,添加蓝牙的权限

<manifest ... ><uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>...
</manifest>
复制代码

2.1 打开蓝牙 第一种:引导用户收到打开 第二种:BLUETOOTH_ADMIN 可以用的mBluetoothAdapter.enable(); 直接打开

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();// 蓝牙是否可用if (!mBluetoothAdapter.isEnabled()) {// 打开蓝牙mBluetoothAdapter.enable();}// 关闭蓝牙if (mBluetoothAdapter.isEnabled()) {mBluetoothAdapter.disable();}
复制代码

2.2 扫描附近可用的蓝牙设备 扫描到的结果会通过广播的形式回调,具体可以可以看附录代码:

          // 扫描蓝牙设备mBluetoothAdapter.cancelDiscovery();复制代码

2.3 连接接 2.4 发送指令 主要是

附录:

import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.UUID;import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;public class MainActivity extends Activity implements OnItemClickListener {private ListView mLv;private BluetoothAdapter mBluetoothAdapter;private OutputStream mOutputStream;private ArrayList<BluetoothDevice> mDevices = new ArrayList<BluetoothDevice>();private BroadcastReceiver mBluetoothReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (BluetoothDevice.ACTION_FOUND.equals(action)) {// 扫描到蓝牙设备BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);mDevices.add(device);mAdapter.notifyDataSetChanged();System.out.println("device name" + device.getName());} else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {Toast.makeText(getApplicationContext(), "开始扫描", Toast.LENGTH_SHORT).show();} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {Toast.makeText(getApplicationContext(), "扫描结束", Toast.LENGTH_SHORT).show();}}};private DeviceAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mLv = (ListView) findViewById(R.id.lv);mAdapter = new DeviceAdapter(getApplicationContext(), mDevices);mLv.setAdapter(mAdapter);mLv.setOnItemClickListener(this);mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();// 注册广播接收者, 当扫描到蓝牙设备的时候, 系统会发送广播IntentFilter filter = new IntentFilter();filter.addAction(BluetoothDevice.ACTION_FOUND);filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);registerReceiver(mBluetoothReceiver, filter);}public void clickBtn(View v) {switch (v.getId()) {case R.id.button1:// 蓝牙是否可用if (!mBluetoothAdapter.isEnabled()) {// 打开蓝牙mBluetoothAdapter.enable();}break;case R.id.button2:// 关闭蓝牙if (mBluetoothAdapter.isEnabled()) {mBluetoothAdapter.disable();}break;case R.id.button3:// 开始扫描mDevices.clear();mAdapter.notifyDataSetChanged();mBluetoothAdapter.startDiscovery();break;case R.id.button4:// 停止扫描mBluetoothAdapter.cancelDiscovery();break;case R.id.button5:sendCtrl(0);break;case R.id.button6:sendCtrl(1);break;case R.id.button7:sendCtrl(2);break;default:break;}}private void sendCtrl(int i) {try {byte[] bs = new byte[5];bs[0] = (byte)0x01;bs[1] = (byte)0x99;if(i== 0) {bs[2] = (byte)0x10;bs[3] = (byte)0x10;}else if(i==1) {bs[2] = (byte)0x11;bs[3] = (byte)0x11;}else if(i==2) {bs[2] = (byte)0x17;bs[3] = (byte)0x17;}bs[4] = (byte)0x99;mOutputStream.write(bs);} catch (IOException e) {e.printStackTrace();}}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(mBluetoothReceiver);}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {BluetoothDevice device = mDevices.get(position);conn(device);}private void conn(final BluetoothDevice device) {// 建立蓝牙连接是耗时操作, 类似TCP Socket, 需要放在子线程里new Thread() {public void run() {try {// 获取 BluetoothSocket, UUID需要和蓝牙服务端保持一致BluetoothSocket bluetoothSocket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));// 和蓝牙服务端建立连接bluetoothSocket.connect();// 获取输出流, 往蓝牙服务端写指令信息mOutputStream = bluetoothSocket.getOutputStream();// 提示用户runOnUiThread(new Runnable() {public void run() {System.out.println("连接成功----");Toast.makeText(getApplicationContext(), "连接成功", Toast.LENGTH_SHORT).show();}});} catch (IOException e) {e.printStackTrace();}};}.start();}
}复制代码

五十一、【Bluetooth蓝牙模块】相关推荐

  1. python五十一:动态导入模块,通过字符串导入模块

    目录结构如下: # 动态导入模块方式一: byd = __import__("car.BYD") # 返回的是最顶层的模块print(byd)# byd.run() byd.BYD ...

  2. Arduino蓝牙模块实验(HC-42)

    一.目的: 用手机连接蓝牙模块,并传输数据给Arduino板,进而控制led灯的开关. 二.主要材料: 蓝牙模块(HC-42).Arduino板.led灯.电脑.手机 蓝牙模块(HC-42)简介: H ...

  3. 2.19 haas506 2.0开发教程 - bluetooth - 蓝牙通信(仅支持2.2以上版本)

    haas506 2.0开发教程 - bluetooth - 蓝牙通信 蓝牙 案例说明 从机测试(支持601与320) 1. 蓝牙调试工具 2. 设备端开发 3. 功能测试 主机测试(仅支持320) 1 ...

  4. 安卓手机与蓝牙模块联合调试(五)-- 编写自己的蓝牙控制界面控制单片

    安卓手机与蓝牙模块联合调试(五)-- 编写自己的蓝牙控制界面控制单片机(上篇,Android 代码实现) 2018年09月18日 00:10:43 涛声依旧Cjt 阅读数:252更多 所属专栏: 安卓 ...

  5. 使用蓝牙测试app和Web Bluetooth API(web蓝牙)连接arduino蓝牙模块并通信

    原文链接:https://dsx2016.com/?p=1505 公众号:大师兄2016 前言 前面的arduino操作都是建立在usb串口通信上的,然而有线的操作不仅不方便,还受限设备数量,数据传输 ...

  6. 常见蓝牙模块介绍和AT指令

    目录 一.HC-05主从一体蓝牙模块 二.HC-06从机蓝牙模块 三.低功耗BLE蓝牙4.0模块(cc2540或cc2541) 四.JDY-10 蓝牙4.0 BLE模块​ 五.蓝牙模块LAYOUT注意 ...

  7. ant man 什么意思_浅谈为什么很多蓝牙模块厂家选择nRF52832?

    浅谈为什么很多蓝牙模块厂家选择nRF52832? 现在蓝牙低功耗(BLE)SOC作为新一代蓝牙,以其低功耗的优势,正凸显出强大的市场竞争力,而其中Nordic公司的nRF52832这一款低功耗蓝牙芯片 ...

  8. BlueTooth: 蓝牙

    蓝牙 蓝牙是一种支持设备短距离通信(一般10m内)的无线电技术.能在包括移动电话.PDA.无线耳机.笔记本电脑.相关外设等众多设备之间进行无线信息交换.利用"蓝牙"技术,能够有效地 ...

  9. 【雕爷学编程】Arduino动手做(110)---JDY-31 蓝牙模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

最新文章

  1. 请求中文乱码_【1】执行Http请求访问网页
  2. Spring-基于注解的配置[02自动装载bean]
  3. servlet web.xml学习笔记
  4. BZOJ 2565: 最长双回文串
  5. HTML中的table和div
  6. php更新用户数据为空,php - 使用PHP更新数据库,而没有来自HTML表单的空值 - SO中文参考 - www.soinside.com...
  7. 【C语言】标准内容介绍(C99)
  8. JLink下载Hex文件
  9. mdf mysql_mdf mysql数据库
  10. 计算机运行慢 卡是什么原因是什么原因,电脑反应慢是怎么回事?五招让你的电脑快得飞起!...
  11. 个人和企业都免费的office办公软件
  12. A股:我要加区块链,监管:你可消停会
  13. Youtube 视频下载
  14. Luat 功能开发教程(十六) LittleVGL
  15. 推荐 :教你用神经网络求解高级数学方程!
  16. 激光切割dxf图案下载
  17. 7.5ElGamal算法
  18. 曲线积分与曲面积分总结_高等数学课程内容、知识点总结与典型题
  19. 带你了解一下蛋白质化学修饰技术!(PEG-β-1,3-GAβ葡聚糖酶/ RNaseA/SAK葡激酶)
  20. JQuery中的id选择器含有特殊字符时,不能选中dom元素的解决方法

热门文章

  1. 一些Layout的坑
  2. JDBC 获取 Oracle 数据库连接(使用 Driver)
  3. node.js 初体验(转载)
  4. SQL优化--使用关联查询代替子查询
  5. 【安全风险通告】Spring Framework远程代码执行漏洞(CVE-2022-22965)安全风险通告第二次更新...
  6. 联合国超10万名员工记录遭泄露
  7. 研究员轻松劫持2.8万台打印机
  8. 网页设计太麻烦?15款免费优质Bootstrap UI工具包助你效率倍增!
  9. maven 不能使用 snapshot 的解决方式
  10. python之路--小数据池,再谈编码,is和 == 的区别