android蓝牙扫描(简单

android 定时唤醒蓝牙,Android保活——蓝牙唤醒(主动kill掉也可唤醒) 项目需要后台保活,但无论怎么保活,只要用户主动kill掉,app依然是活不了。发现了蓝牙唤醒这个方式,用户主动kill掉也可行。Android 8.0开始提供了 startscan的方法,public void startScan(ScanCallback callback)public void startScan(List filters,ScanSettings settings,ScanC... 阅读详情

蓝牙扫描有两种方式startScan和startLeScan,其中startLeScan官方@Deprecated

本文只做了蓝牙的扫描和显示。

1、配置蓝牙权限

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

2、xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/search"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="搜索"/>
    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </ListView>
</LinearLayout>

3、第一种蓝牙扫描startScan

public class MainActivity extends AppCompatActivity {

    private ArrayList<String> data = null;
    private ListView listView = null;
    private BluetoothAdapter bta = null;
    private BluetoothManager btm = null;
    private Button button = null;
    ArrayAdapter<String> adapter = null;
    private BluetoothLeScanner scanner = null;
    private Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获得数据
        this.data = new ArrayList<>();
        // 初始化控件
        this.initView();
    }

    private void initView(){
        // 获得button
        this.button = findViewById(R.id.search);
        this.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 扫描蓝牙
                scanBle();
            }
        });

        // 初始化ListView
        this.adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, this.data);
        this.listView = findViewById(R.id.lv);
        this.listView.setAdapter(adapter);
    }

    // 蓝牙扫描回调
    private ScanCallback newBtsc = new ScanCallback() {
        @Override
        public void onScanResult(int callbackType, ScanResult result) {
            super.onScanResult(callbackType, result);
            BluetoothDevice device = result.getDevice();

            // 更新数据
            data.add(device.getAddress()+""+device.getName());
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onBatchScanResults(List<ScanResult> results) {
            super.onBatchScanResults(results);
        }
        @Override
        public void onScanFailed(int errorCode) {
            super.onScanFailed(errorCode);
        }
    };

    // 扫描蓝牙
    private void scanBle(){
        // 初始化蓝牙适配器
        btm = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
        if(btm == null){
           return;
        }
        bta = btm.getAdapter();

        // 打开蓝牙
        if(bta == null || !bta.isEnabled()){
            Intent enable = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enable, 1);
        }else{
            scanner = bta.getBluetoothLeScanner();
            scanner.startScan(newBtsc);
            // 设置扫描时间
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    scanner.stopScan(newBtsc);
                }
            }, 8000);
        }
    }

}

3、第二种蓝牙扫描startLeScan

public class MainActivity extends AppCompatActivity {

    private ArrayList<String> data = null;
    private ListView listView = null;
    private BluetoothAdapter bta = null;
    private BluetoothManager btm = null;
    private Button button = null;
    ArrayAdapter<String> adapter = null;
    private Handler handler = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获得数据
        this.data = new ArrayList<>();
        // 初始化控件
        this.initView();
    }

    private void initView() {
        // 获得button
        this.button = findViewById(R.id.search);
        this.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 扫描蓝牙
                scanBle();
            }
        });

        // 初始化ListView
        this.adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, this.data);
        this.listView = findViewById(R.id.lv);
        this.listView.setAdapter(adapter);
    }

    private BluetoothAdapter.LeScanCallback oldBtsc = new BluetoothAdapter.LeScanCallback() {
        @Override
        public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
            data.add(device.getAddress() + "");
            adapter.notifyDataSetChanged();
        }
    };

    // 扫描蓝牙
    private void scanBle() {
        // 初始化蓝牙适配器
        btm = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
        if( btm == null){
            return;
        }

        bta = btm.getAdapter();

        // 打开蓝牙
        if (bta == null || !bta.isEnabled()) {
            Intent enable = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enable, 1);
        } else {
            bta.startLeScan(oldBtsc);
            // 设置扫描时间
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    bta.stopLeScan(oldBtsc);
                }
            }, 8000);
        }
    }
}
android博客园蓝牙指令,【安卓相关】蓝牙开发、扫描、通知、发送指令 最近在做蓝牙相关的开发,虽然说 FastBleLib 这样的第三方蓝牙连接库非常方便,但是原生开发还是有必要了解一下的。首先说明1.不需要问硬件工程师UUID2.不需要写 UI3.本案例只有一个类文件4.没有写动态请求蓝牙权限相关的,自己测试过程中,手动开启所有权限即可。5.代码解释全部写在注释,和日志public class Main8Activity extends AppCompatActi... 阅读详情

相关推荐

MASA MAUI Plugin 安卓蓝牙低功耗(一)蓝牙扫描

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。微软的MAUI并没有提供蓝牙低功耗设备的相关功能,而物联网开发中蓝牙低功耗是十分常见的,所以我们今天自己集成一个。由于蓝牙功能设计的内容比较多,篇幅有限,本文只集成一个最基本的蓝牙扫描功能,意在抛砖引玉。后续会陆续更新其他蓝牙通讯功能的文章。本文蓝牙低功耗简称为BLE如果你对BLE的相关概念不了解,可以参考 开发者官网链接:蓝牙低功耗-安卓本文JAVA相关代码均来自安卓开发者官网。

MASAteam的博客 2665

android扫描蓝牙信号的小结,startLeScan()方法和startDiscovery()方法

注意的问题 1:添加权限 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permi

weixin_44248028的博客 7266

Android 蓝牙监听与扫描

基础知识 蓝牙操作主要有四项任务:设置蓝牙、查找局部区域内的配对设备或可用设备、连接设备,以及在设备间传输数据。 蓝牙的分类 传统蓝牙(Classic Bluetooth) 电池使用强度大 可用于数据量较大的传输,如语音,音乐,较高数据量传输等 广泛用于音箱,耳机,汽车电子及传统数传行业 低功耗蓝牙(Bluetooth LE) 功耗低 不支持音频协议,传输速率较低 主要用于移动互联和健康医疗...

未子涵的博客 3705

android4.3 Bluetooth(le)分析之startLeScan分析

BluetoothAdapter.java中有low enery(le)的一些方法,android提供了这些方法,但源码中并未找到这些方法的调用之处。本文档主要分析这类方法的执行流程,来了解下le到底做了些什么。   本文主要就是分析下startLeScan方法(两个重载方法)。 public boolean startLeScan(LeScanCallback call

aoshiwenrou的专栏 2384

android 蓝牙通讯实现手机蓝牙的开启,并扫描附近可见的蓝牙设备

蓝牙是一种重要的短距离无线通信协议,广泛应用于各种设备(手机,医疗,汽车等)。蓝牙是比较常用的无线通信设备,早研究成为手机的标配。现在的安卓手机基本上都有蓝牙,所有通过蓝牙对数据有很好的硬件基础 在Android中,与蓝牙有关的类和接口在android.bluetooth包中。其中BluetoothAdapter是蓝牙中的核心类,代表本地的蓝牙适配器设备。BluetoothAdapter类让用户

chenfengdejuanlian的专栏 5033

Android 低功耗蓝牙开发(扫描、连接)

由于本文罗列的知识点是根据我自身总结出来的,并且由于本人水平有限,无法全部提及,欢迎大神们能补充~将来我会对上面的知识点一个一个深入学习,也希望有童鞋跟我一起学习,一起进阶。提升架构认知不是一蹴而就的,它离不开刻意学习和思考。**这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家,**梳理了多年的架构经验,筹备近1个月最新录制的,相信这份视频能给你带来不一样的启发、收获。,第一时间获取最新知识点Android架构师之路很漫长,一起共勉吧!

2401_84123094的博客 1038

安卓蓝牙扫描流程

扫描开启广播:BluetoothAdapter.ACTION_DISCOVERY_STARTED = "android.bluetooth.adapter.action.DISCOVERY_STARTED";扫描关闭广播:BluetoothAdapter.ACTION_DISCOVERY_FINISHED = "android.bluetooth.adapter.action.DISCOVERY_FINISHED";

事后不诸葛的博客 2095

Android startScan流程 & Bluedroid源码分析

Android BLE扫描流程:权限验证、初始化适配器、配置扫描参数、启动扫描并处理回调。源码分析揭示其内部检查与资源管理细节,确保安全与效率。

byte轻骑兵的技术小窝 5494

android 蓝牙 自动扫描,android蓝牙扫描(简单

蓝牙扫描有两种方式startScan和startLeScan,其中startLeScan官方@Deprecated本文只做了蓝牙的扫描和显示。 1、配置蓝牙权限2、xml3、第一种蓝牙扫描startScanpublic class MainActivity extends AppCompatActivity {private ArrayListdata = null;private ListVie...

weixin_33269198的博客 3014

Android BLE 的扫描配对、连接流程梳理

本文详细介绍了Android BLE(低功耗蓝牙)开发流程,主要包括扫描、配对和连接三个关键环节。首先阐述了开发前提条件,包括系统支持、权限配置和蓝牙状态检查。扫描部分重点讲解了主动和被动两种扫描模式的特点及实现步骤。配对环节说明了可选的安全验证流程,包括发起请求和处理状态变化。连接部分详细说明了GATT连接建立、服务发现以及数据读写操作,并强调了异步处理的回调机制。文章还提供了连接断开处理和资源释放的注意事项,为开发者提供了完整的Android BLE开发技术参考。

byte轻骑兵的技术小窝 7139

Android蓝牙扫描实现与应用详解

在Android系统中,蓝牙通信是实现设备间短距离无线连接的重要方式。蓝牙开发主要基于蓝牙协议栈,涵盖物理层、链路层、逻辑传输层及应用层。开发者通过Android SDK提供的蓝牙类与系统交互,完成设备发现、连接与数据传输等操作。核心类包括::表示本地蓝牙适配器,是所有蓝牙交互的入口。:代表远程蓝牙设备,用于连接与通信。:用于BLE设备扫描的新一代API,提供更灵活的扫描控制。这些类构成了Android蓝牙开发的基础,为后续广播监听与扫描回调实现提供了支撑。

weixin_36474001的博客 1237

Android Ble蓝牙App(一)扫描

  关于低功耗的蓝牙介绍我已经做过很多了,只不过很多人不是奔着学习的目的去的,拿着源码就去运行,后面又发现连接设备后马上断开,然后不会自己看问题,这个现象就是快餐式的,你不了解里面的知识内容,自然就不知道是怎么回事,重复的问题我回答了好多次了。而我也是觉得写的有问题,本意上来说我是希望读者可以参考来写,能看一看文章内容,而结果绝大多数,看个标题看个运行效果,下载源码就运行,运行有问题就问你,没有什么思考。   针对这个情况,我决定做了系列性的Ble蓝牙App,尽可能的避免在你运行的时候出现bug,所以这是一

晨曦 8148

人工智能训练师认证教程(5)使用MONAI进行医学影像分析的完整指南

本文介绍了使用MONAI框架进行医学影像分析的全流程。首先详细说明了环境搭建步骤,包括PyTorch和MONAI的安装配置。然后以肺部CT 3D分割为例,分步骤讲解了数据准备与预处理、3D UNet模型构建、训练配置(DiceLoss损失函数、Adam优化器等)以及训练验证循环的实现。文章还包含推理可视化方法和模型导出为ONNX格式的部署方案,并强调了医学影像分析中的数据格式适配、强度归一化、显存优化等关键注意事项。最后指出MONAI的医学专用组件可大幅简化开发流程,建议后续可探索SwinUNETR等进阶方

华为开发者布道师,天府英才计划,致力于大数据+AI 的应用创新,助力企业与个人AI创新赋能。 1208

android 蓝牙 自动扫描,android 蓝牙重复扫描

本人想在service内让蓝牙可以一直执行扫描,之前在activity内可以重复扫描,但移植到服务后就不能了问一下要怎么解决?publicclasssearch_beaconextendsServiceimplementsLocationListener{HashMaprecord=newHashMap();privateLongstartTime;privateHan...

weixin_33389183的博客 983

小鹏P7车载以太网诊断实战:从OBD口定义到DoIP协议验证

本文详细解析了小鹏P7车载以太网诊断的实战过程。从OBD接口的针脚定义入手,依据ISO13400标准,确认了以太网线对位置,并指导制作专用的RJ45转OBD线束。通过搭建测试环境,使用Ping、端口扫描及Wireshark抓包,最终成功验证了车辆对DoIP协议的支持,为基于以太网的高速诊断与刷写提供了完整的技术路径。

CAT789的专栏 522

nnU-Net v2实战:从零开始配置环境与训练自定义医学影像数据集

本文详细介绍了nnU-Net v2在医学影像分割中的实战应用,从环境配置到自定义数据集训练的全流程。重点讲解了Python 3.9+环境搭建、PyTorch安装技巧、医学影像数据预处理规范,以及五折交叉验证训练方法,帮助开发者快速掌握这一先进的医学影像分析工具。

weixin_28718487的博客 352

android蓝牙扫描广播,【android开发】蓝牙扫描时间的设置

[Asm] 纯文本查看 复制代码/*** 查找低功耗蓝牙,该方法在4.3(API 18)以上,无法查找“传统蓝牙”** @param scanInterval 扫描时长,单位:秒* @param bluetoothAdapter* @param btScanCallback 扫描结果回调*/public static void findBluetoothLE(int scanInterval, f...

weixin_39911567的博客 1733

WGCNA样本量不够怎么办?5种替代方案帮你解决小样本基因共表达分析难题

本文针对WGCNA样本量不足的问题,提供了5种科学替代方案,包括CEMiTool、参数调整、多组学数据整合、机器学习特征提取和公共数据利用。这些方法帮助研究者在小样本条件下仍能进行可靠的基因共表达分析,特别适用于罕见病和珍贵临床样本研究。

weixin_42554042的博客 303

android ble蓝牙接收不到数据_Android安卓蓝牙BLE 扫描连接接收数据 封装好的类

package yipai.xudongjian.bluetoothsample;import android.bluetooth.BluetoothAdapter;import android.bluetooth.BluetoothDevice;import android.bluetooth.BluetoothGatt;import android.bluetooth.BluetoothGat...

weixin_39689428的博客 437

【Out-of-Distribution Detection】Evidential Deep Learning in NeurIPS 2018 个人理解

核心思想是将分类器的概率输出视为一个狄利克雷分布(Dirichlet Distribution)并替换,之后引入两个损失分别负责保证预测结果准确性和提升被错误分类的样本的不确定性。

研究兴趣:开放集识别、开放世界识别、新类发现、增量学习、少样本学习 2436

rk3568 rk628桥片 rgb2hdmi

RK628 是瑞芯微全新推出的视频桥接芯片,支持丰富的显示接口,支持高分辨率大屏产品转换需求。基于DRM、FB的显示框架易于使用。 输入信号支持:HDMI、RGB、BT.1120,输出信号支持 HDMI、GVI、Dual LVDS、Dual MIPI、MIPI-CSI、RGB、BT.1120,最高支持4K 60fps 输入/输出转换,并且支持输入到输出 1/4~4倍的缩放。

weixin_35723192的博客 452

Android蓝牙扫描设备

Android蓝牙扫描设备踩坑 最近做iOS和Android的蓝牙打印功能,蓝牙打印少不了扫描附近的蓝牙设置,本博主要讲解Android开发中扫描蓝牙设备遇到的坑和解决方法 所需权限 BLUETOOTH ,BLUETOOTH_ADMIN 发起蓝牙连接,接受蓝牙连接和传输数据,允许程序发现和配对蓝牙设备需要该权限 ACCESS_FINE_LOCATION 扫描蓝牙设备需要, 如果工程设置的target 位Android 9 (API level 28) 或更低, 可以声明ACCESS_COARSE

zhuangch的专栏 2233

(二)使用VS2022克隆下载C++自制植物大战僵尸游戏教程

本文将介绍如何使用VS2022克隆下载《植物大战僵尸C++自制版本》。Gitee项目地址:Gitee仓库地址Github项目地址:Github仓库地址游戏官网地址(下载可直接运行)游戏官网。

尔灵尔亿的博客 4933

Android 蓝牙BLE扫描

1.声明蓝牙权限和定位权限 <!--蓝牙权限--> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <!-- LE Beacons位置相关权限--> <uses-permission android:name="android.permiss

yinhunzw的专栏 3726

AI产品经理面试宝典第94天:RAG知识库构建与预处理策略面试指南

本文深入解析RAG知识库构建的核心挑战与预处理策略,涵盖文档格式转换、问答对生成及自动化测试全流程,为AI产品经理提供面试必备的实战方法论与避坑指南,助你精准应对技术深度类问题。

打造全国最全的AI Agent开发知识领域的博客 312

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android获取蓝牙的扫描状态,安卓获取蓝牙状态

笔者最近一直在做蓝牙状态获取方面的事情,总结出一套获取蓝牙状态的代码,分享如下:private BluetoothAdapter ba ; //蓝牙适配器ba = BluetoothAdapter.getDefaultAdapter();//蓝牙适配器是否存在,即是否发生了错误if (ba == null){isBlueCon = -1; //error...

weixin_30232751的博客 865

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: Fragment懒加载类
下一篇: SurfaceView绘制动态直线
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值