Android Bluetooth蓝牙开发:发现Bluetooth蓝牙设备(1)

Android Bluetooth蓝牙作为设备,要与其他蓝牙设备互联,那么先决条件就是已经被发现,本文先简介Android Bluetooth蓝牙的发现。
(1)启动代码后,首先要检查是否设备是否支持蓝牙设备,如果设备自身就没有蓝牙设备,巧妇难为无米之炊,就不要再做无用功了,代码片段:

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();// 检查设备上是否支持蓝牙设备if (mBluetoothAdapter == null) {Log.d(tag, "Device does not support Bluetooth");// 不支持蓝牙设备,木法,巧妇难为无米之炊,退出!return;}

(2)如果设备上有蓝牙设备,但此时用户有可能没有打开蓝牙,那么此时代码应该启动一个系统调用,弹出系统打开蓝牙的对话框,让用户手动打开蓝牙设备,代码片段:

// 如果用户的设备没有开启蓝牙,则弹出开启蓝牙设备的对话框,让用户开启蓝牙if (!mBluetoothAdapter.isEnabled()) {Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);// 接下去,在onActivityResult回调判断}

(3)一切就绪后(设备上有蓝牙硬件模块,切蓝牙已经打开),接下来就是发现周围的蓝牙设备了,要做的就是扫描。本身扫描蓝牙的代码很简单,就一句代码:BluetoothAdapter的startDiscovery(),startDiscovery()返回的一个是布尔值,此值为true时候仅仅表示Android系统已经启动蓝牙模块的扫描过程,这个扫描过程是一个异步的过程。为了得到扫描结果,在一个广播接收器中异步接收Android系统发送的扫描结果:

// 广播接收发现蓝牙设备private final BroadcastReceiver mReceiver = 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);// 添加到ListView的Adapter中。mArrayAdapter.add("设备名字:" + device.getName() + "\n设备地址:" + device.getAddress());mArrayAdapter.notifyDataSetChanged();}}};

以上完整的全部代码(其实全部在一个MainActivity.java代码文件里面):

package zhangphil.bluetooth;import android.app.ListActivity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;public class MainActivity extends ListActivity {private final int REQUEST_ENABLE_BT = 0xa01;private final String tag = "zhangphil";private ArrayAdapter<String> mArrayAdapter;private BluetoothAdapter mBluetoothAdapter;// 广播接收发现蓝牙设备private final BroadcastReceiver mReceiver = 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);// 添加到ListView的Adapter中。mArrayAdapter.add("设备名字:" + device.getName() + "\n设备地址:" + device.getAddress());mArrayAdapter.notifyDataSetChanged();}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 先初始化蓝牙设备// initBluetoothAdapter();// 注册广播接收器。接收蓝牙发现讯息IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);registerReceiver(mReceiver, filter);mArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1);setListAdapter(mArrayAdapter);}private void initBluetoothAdapter() {mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();// 检查设备上是否支持蓝牙设备if (mBluetoothAdapter == null) {Log.d(tag, "Device does not support Bluetooth");// 不支持蓝牙设备,木法,巧妇难为无米之炊,退出!return;}// 如果用户的设备没有开启蓝牙,则弹出开启蓝牙设备的对话框,让用户开启蓝牙if (!mBluetoothAdapter.isEnabled()) {Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);// 接下去,在onActivityResult回调判断}}// 启动蓝牙发现...private void discoveringDevices() {if (mBluetoothAdapter == null)initBluetoothAdapter();if (mBluetoothAdapter.startDiscovery()) {Log.d(tag, "启动蓝牙扫描设备...");}}// 可选方法,非必需// 此方法使自身的蓝牙设备可以被其他蓝牙设备扫描到,// 注意时间阈值。0 - 3600 秒。0将一直保持可被发现、可被扫描状态,但会很消耗电力资源。// 通常设置时间为120秒。private void enablingDiscoverability() {Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);// 0,自身设备始终可以被发现(意味着将十分消耗设备资源,如电源)// 第二个参数可设置的范围是0~3600秒,在此时间区间(窗口期)内可被发现// 任何不在此区间的值都将被自动设置成120秒。discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);startActivity(discoverableIntent);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == REQUEST_ENABLE_BT) {if (resultCode == RESULT_OK) {Log.d(tag, "打开蓝牙成功!");}if (resultCode == RESULT_CANCELED) {Log.d(tag, "放弃打开蓝牙!");}} else {Log.d(tag, "打开蓝牙异常!");return;}}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.action_init) {initBluetoothAdapter();}if (id == R.id.action_discovering) {discoveringDevices();}// 可选,非必需,系统默认的是120秒内可被发现。if (id == R.id.action_enabling_discoverability) {enablingDiscoverability();}return super.onOptionsItemSelected(item);}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(mReceiver);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}
}

需要在Androidmanifest.xml添加蓝牙相关权限:

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

至于菜单中的menu选项,定义在res/menu/main.xml文件里面:

<menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"tools:context="zhangphil.bluetooth.MainActivity" ><itemandroid:id="@+id/action_init"android:orderInCategory="1"android:showAsAction="never"android:title="初始化蓝牙设备"/><itemandroid:id="@+id/action_discovering"android:orderInCategory="2"android:showAsAction="never"android:title="发现设备"/><itemandroid:id="@+id/action_enabling_discoverability"android:orderInCategory="3"android:showAsAction="never"android:title="使自身设备可被别人的蓝牙设备发现"/></menu>

代码运行结果如图所示:

Android Bluetooth蓝牙开发:发现Bluetooth蓝牙设备(1)相关推荐

  1. Android BLE蓝牙开发知识总结

    Android BLE蓝牙开发知识总结 1.蓝牙介绍 1.1什么是蓝牙?    蓝牙( Bluetooth® ):是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据交换(使用2 ...

  2. Android 低功耗蓝牙开发

    初识低功耗蓝牙 Android 4.3(API Level 18)开始引入Bluetooth Low Energy(BLE,低功耗蓝牙)的核心功能并提供了相应的 API, 应用程序通过这些 API 扫 ...

  3. 蓝牙配对模式 java_【Android】蓝牙开发—— 经典蓝牙配对介绍(Java代码实现演示)附Demo源码...

    目录 前言 一.连接&配对方法介绍 二.演示:第一次连接蓝牙设备  &  直接与蓝牙设备建立配对 三.总结 四.补充 五.Demo案例源码地址: 前言 前面两篇文章[Android]蓝 ...

  4. 【Android】蓝牙开发—— 经典蓝牙配对介绍(Java代码实现演示)附Demo源码

    目录 前言 一.连接&配对方法介绍 二.演示:第一次连接蓝牙设备  &  直接与蓝牙设备建立配对 三.总结 四.补充 五.Demo案例源码地址: 前言 前面两篇文章[Android]蓝 ...

  5. Android Ble蓝牙开发总结

    Android Ble蓝牙开发总结 前言 本文总结了ble的搜索,连接,读写操作.以及在开发过程中可能遇到的坑. 首先我们需要知道,什么是ble. 蓝牙发展至今经历了8个版本的更新.1.1.1.2.2 ...

  6. 【Android】蓝牙开发——BLE(低功耗蓝牙)(附完整Demo)

    目录 目录 前言 一.相关概念介绍 二.实战开发 三.项目演示 四.Demo案例源码地址 五.更新记录 1.2020/12/29 :修改 setupService()中错误 2.2021/05/14 ...

  7. Android经典蓝牙开发全流程

    一.基本介绍   所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,最初是由爱立信公司公司发明的.技术始于爱立信公司 1994 方案,它是研究在移动电话和其他配件间进行低功耗.低成本无 ...

  8. Android 经典蓝牙开发

    本文主要讲解经典蓝牙的开发,主要包含以下几个知识点: 蓝牙 API 简介 经典蓝牙开发的一般步骤 相信通过以上步骤,您会很快上手一个 Android 经典蓝牙开发的 App. 蓝牙 API 简介 An ...

  9. 【Android】蓝牙开发——经典蓝牙:配对与解除配对 实现配对或连接时不弹出配对框

    目录 一.配对方法 二.解除配对方法 三.配对/解除配对结果 四.justwork配对模式下,不弹出配对框 五.pincode配对模式下,不弹出配对框 六.小结 在之前的文章[Android]蓝牙开发 ...

最新文章

  1. 拼多多一度跌破发行价:已遭上海工商约谈 被要求自查自纠
  2. ACM算法--枚举方法(指数枚举,组合枚举)模板
  3. java栈的应用_Java堆栈应用程序
  4. python3中maketrans()方法的使用
  5. Conversion of Continuous-Valued Deep Networks to Efficient Event-Driven Networks for Image Classific
  6. 系统设计题:如何设计一个电商平台积分兑换系统!
  7. Xcode 静态库调试策略
  8. Servlet ---- cookie session
  9. 某虚拟化项目中思科与华为交换机链路聚合互连案例
  10. Java基础面试题:常见的异常类有哪些?
  11. STM32中使用PS2手柄
  12. 网络调试助手连接mysql_网络调试助手模拟MQTT协议连接百度物联网并操作时序数据库...
  13. Flash存储卡与读卡器常识
  14. Mysql基础篇(3)—— MySQL数据库类型
  15. Vue项目实战 —— 后台管理系统( pc端 )
  16. STM32互补PWM输出使能控制
  17. 音视频的流程:录制、播放、编码解码、上传下载等
  18. 小说作者推荐:张廉合集
  19. 计算机附件计算器的用法,计算机附件中的计算器使用方法.doc
  20. Cloud Foundry 峰会进入中国 全球专家与你面对面

热门文章

  1. ts从入门到进阶—3-4var/let/const声明,解构,展开
  2. PTA出现EOFError
  3. XSCTF联合招新【Simple-Math】(MSIC+Crypto)
  4. 常用css整理2 转自csdn
  5. HSWMS——库存管理
  6. mxreality.js 免费开源的全景图/全景视频/VR 直播播放器介绍
  7. 中英文c语言编程对照表,[转〕C中的中英文对照.
  8. java ip调天气预报接口_java调天气预报接口
  9. c语言字符 ul,c语言中的0UL或1UL是什么意思
  10. 儿童教育企业官网高保真Axure原型模板