Android Bluetooth蓝牙开发:发现Bluetooth蓝牙设备(1)
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)相关推荐
- Android BLE蓝牙开发知识总结
Android BLE蓝牙开发知识总结 1.蓝牙介绍 1.1什么是蓝牙? 蓝牙( Bluetooth® ):是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网之间的短距离数据交换(使用2 ...
- Android 低功耗蓝牙开发
初识低功耗蓝牙 Android 4.3(API Level 18)开始引入Bluetooth Low Energy(BLE,低功耗蓝牙)的核心功能并提供了相应的 API, 应用程序通过这些 API 扫 ...
- 蓝牙配对模式 java_【Android】蓝牙开发—— 经典蓝牙配对介绍(Java代码实现演示)附Demo源码...
目录 前言 一.连接&配对方法介绍 二.演示:第一次连接蓝牙设备 & 直接与蓝牙设备建立配对 三.总结 四.补充 五.Demo案例源码地址: 前言 前面两篇文章[Android]蓝 ...
- 【Android】蓝牙开发—— 经典蓝牙配对介绍(Java代码实现演示)附Demo源码
目录 前言 一.连接&配对方法介绍 二.演示:第一次连接蓝牙设备 & 直接与蓝牙设备建立配对 三.总结 四.补充 五.Demo案例源码地址: 前言 前面两篇文章[Android]蓝 ...
- Android Ble蓝牙开发总结
Android Ble蓝牙开发总结 前言 本文总结了ble的搜索,连接,读写操作.以及在开发过程中可能遇到的坑. 首先我们需要知道,什么是ble. 蓝牙发展至今经历了8个版本的更新.1.1.1.2.2 ...
- 【Android】蓝牙开发——BLE(低功耗蓝牙)(附完整Demo)
目录 目录 前言 一.相关概念介绍 二.实战开发 三.项目演示 四.Demo案例源码地址 五.更新记录 1.2020/12/29 :修改 setupService()中错误 2.2021/05/14 ...
- Android经典蓝牙开发全流程
一.基本介绍 所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,最初是由爱立信公司公司发明的.技术始于爱立信公司 1994 方案,它是研究在移动电话和其他配件间进行低功耗.低成本无 ...
- Android 经典蓝牙开发
本文主要讲解经典蓝牙的开发,主要包含以下几个知识点: 蓝牙 API 简介 经典蓝牙开发的一般步骤 相信通过以上步骤,您会很快上手一个 Android 经典蓝牙开发的 App. 蓝牙 API 简介 An ...
- 【Android】蓝牙开发——经典蓝牙:配对与解除配对 实现配对或连接时不弹出配对框
目录 一.配对方法 二.解除配对方法 三.配对/解除配对结果 四.justwork配对模式下,不弹出配对框 五.pincode配对模式下,不弹出配对框 六.小结 在之前的文章[Android]蓝牙开发 ...
最新文章
- 拼多多一度跌破发行价:已遭上海工商约谈 被要求自查自纠
- ACM算法--枚举方法(指数枚举,组合枚举)模板
- java栈的应用_Java堆栈应用程序
- python3中maketrans()方法的使用
- Conversion of Continuous-Valued Deep Networks to Efficient Event-Driven Networks for Image Classific
- 系统设计题:如何设计一个电商平台积分兑换系统!
- Xcode 静态库调试策略
- Servlet ---- cookie session
- 某虚拟化项目中思科与华为交换机链路聚合互连案例
- Java基础面试题:常见的异常类有哪些?
- STM32中使用PS2手柄
- 网络调试助手连接mysql_网络调试助手模拟MQTT协议连接百度物联网并操作时序数据库...
- Flash存储卡与读卡器常识
- Mysql基础篇(3)—— MySQL数据库类型
- Vue项目实战 —— 后台管理系统( pc端 )
- STM32互补PWM输出使能控制
- 音视频的流程:录制、播放、编码解码、上传下载等
- 小说作者推荐:张廉合集
- 计算机附件计算器的用法,计算机附件中的计算器使用方法.doc
- Cloud Foundry 峰会进入中国 全球专家与你面对面
热门文章
- ts从入门到进阶—3-4var/let/const声明,解构,展开
- PTA出现EOFError
- XSCTF联合招新【Simple-Math】(MSIC+Crypto)
- 常用css整理2 转自csdn
- HSWMS——库存管理
- mxreality.js 免费开源的全景图/全景视频/VR 直播播放器介绍
- 中英文c语言编程对照表,[转〕C中的中英文对照.
- java ip调天气预报接口_java调天气预报接口
- c语言字符 ul,c语言中的0UL或1UL是什么意思
- 儿童教育企业官网高保真Axure原型模板