【Andoird开发】android获取蓝牙权限,搜索蓝牙设备MAC

    <!-- Android 12以下才需要定位权限, Android 9以下官方建议申请ACCESS_COARSE_LOCATION --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /><!-- Android 12在不申请定位权限时,必须加上android:usesPermissionFlags="neverForLocation",否则搜不到设备 --><uses-permissionandroid:name="android.permission.BLUETOOTH_SCAN"android:usesPermissionFlags="neverForLocation"tools:targetApi="s" /><uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /><uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

Andoird蓝牙java:

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 请求权限requestPermissions();//        settingBlueTooth();
//        scanLeDevice(true);// 初始化蓝牙适配器bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();// 开始搜索蓝牙设备if (bluetoothAdapter != null && bluetoothAdapter.isEnabled()) {if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {return;}bluetoothAdapter.startDiscovery();// 注册广播接收器来接收蓝牙搜索结果IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);bluetoothReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();if (BluetoothDevice.ACTION_FOUND.equals(action)) {// 从Intent中获取蓝牙设备对象BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);// 打印蓝牙设备的MAC地址if (device != null) {Log.i(TAG, "Found device: " + device.getAddress());// 如果设备的MAC A4开头,就是我们的设备if (device.getAddress().startsWith("A4")) {Log.i(TAG, "Found our device: " + device.getAddress());}}}}};registerReceiver(bluetoothReceiver, filter);} else {Log.e(TAG, "Bluetooth is not available");}EdgeToEdge.enable(this);setContentView(R.layout.activity_main);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});}@Overrideprotected void onDestroy() {super.onDestroy();// 停止蓝牙设备搜索并注销广播接收器if (bluetoothAdapter != null) {if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {return;}bluetoothAdapter.cancelDiscovery();}unregisterReceiver(bluetoothReceiver);}

请求权限requestPermissions

private void requestPermissions() {if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH) != PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_ADMIN) != PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {// 如果没有获取到权限,请求权限ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.BLUETOOTH,android.Manifest.permission.BLUETOOTH_ADMIN,android.Manifest.permission.ACCESS_FINE_LOCATION,android.Manifest.permission.WRITE_EXTERNAL_STORAGE,}, PERMISSION_REQUEST_CODE);}} else {if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_ADVERTISE) != PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED|| ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {// 如果没有获取到权限,请求权限ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.BLUETOOTH_SCAN,android.Manifest.permission.BLUETOOTH_ADVERTISE,android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.ACCESS_FINE_LOCATION,android.Manifest.permission.WRITE_EXTERNAL_STORAGE,}, PERMISSION_REQUEST_CODE);}}// 如果权限已经被授予,直接进行蓝牙功能检查和定位功能检查}@Overrideprotected void onDestroy() {super.onDestroy();// 停止蓝牙设备搜索并注销广播接收器if (bluetoothAdapter != null) {if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {return;}bluetoothAdapter.cancelDiscovery();}unregisterReceiver(bluetoothReceiver);}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/15328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建FreeRTOS工程

创建STM32CubeMX工程 配置时钟 配置FreeRTOS 生成Keil MDK的工程 打开工程 结尾 这就是我们用STM32CubeMX创建的最基本的一个FreeRTOS的工程。可以看到&#xff0c;这个与我们使用stm32开发的裸机程序有相同的地方&#xff0c;也有不同的地方&#xff0c;我们可以发现&am…

MySQL 8.4.0 LTS 变更解析:I_S 表、权限、关键字和客户端

↑ 关注“少安事务所”公众号&#xff0c;欢迎⭐收藏&#xff0c;不错过精彩内容~ MySQL 8.4.0 LTS 已经发布 &#xff0c;作为发版模型变更后的第一个长期支持版本&#xff0c;注定要承担未来生产环境的重任&#xff0c;那么这个版本都有哪些新特性、变更&#xff0c;接下来少…

Ubuntu系统上安装NVIDIA驱动【笔记】

Ubuntu上安装NVIDIA驱动&#xff0c;您可以按照以下步骤操作&#xff1a; 首先&#xff0c;您需要配置软件源&#xff08;根据情况配置&#xff0c;否则影响更新和下载速度&#xff09;。 接下来&#xff0c;您可以按照上一条回答中的步骤来安装新的NVIDIA驱动。首先&#xff…

YOLOv5模型的快速推理方法

一 概述 ultralytics 开发的目标检测算法 YOLOv5 有着广泛的应用&#xff0c;在速度和精准度上做了良好的平衡&#xff0c;被很多商业化开发所采纳。本文档主要记录使用 pip 安装的方式快速的部署推理 YOLOv5 的模型文件, yolov5 的原始模型文件为 .pt . 本文档适用于 yolov5…

2024.5.6力扣刷题记录-二叉树学习记录5(未完)

一、学习视频 【二叉树的层序遍历【基础算法精讲 13】】 https://www.bilibili.com/video/BV1hG4y1277i/?share_sourcecopy_web&vd_sourcedc0e55cfae3b304619670a78444fd795 二、跟练代码 1.102. 二叉树的层序遍历 # Definition for a binary tree node. # class Tree…

Sui生态DeFi项目Cetus和Aftermath宣布启动孵化器

Sui DeFi中的去中心化交易所Cetus和Aftermath Finance联合Sui基金会宣布启动新的孵化器&#xff0c;为初创项目提供更多可行性途径。这两个DeFi项目在Sui上有着较长的历史&#xff0c;自去年一同与主网推出以来&#xff0c;目前在TVL方面位居前五。这两个项目的持久性和成功使它…

国产数据库TiDB的常用方法

TiDB的常用方法主要涉及安装配置、数据操作、性能调优以及监控和维护等方面。以下是对这些常用方法的归纳和介绍&#xff1a; 1. 安装与配置 安装TiDB&#xff1a;根据官方文档的指引&#xff0c;用户可以按照步骤进行TiDB的安装。配置TiDB&#xff1a;安装完成后&#xff0c…

curl: (60) SSL certificate problem: self-signed certificat

目录&#xff1a; 1、背景2、测试结果 1、背景 今天帮忙客户排查问题&#xff0c;报错请求超时&#xff0c;但是ping客户的ip以及测试端口都是通的&#xff0c;最终不得不从中台服务器上发起请求客户回调接口&#xff0c;报错如下&#xff1a; 怀疑是客户的证书有问题&#xf…

什么是以太坊?

以太坊&#xff08;Ethereum&#xff09;是一个开源的区块链平台&#xff0c;它支持智能合约和去中心化应用&#xff08;dApps&#xff09;。由Vitalik Buterin于2015年推出&#xff0c;以太坊为开发者提供了一个灵活的编程环境&#xff0c;使他们能够在区块链上创建和部署各种…

C语言.数据结构.顺序表

1.顺序表的概念及结构 1.1线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0c;…

C++ char[]、char*、const char*、string 相互转换

在写C代码时&#xff0c;会经常用到char[]、char*、const char*、string 相互转换&#xff0c;现总结如下&#xff0c;供大家参考。 原类型目标类型转换代码char[]char*char ch[] "test string"; char *c ch;char[]const char*char ch[] "test string"…

闲鱼电商运营高级课程,一部手机学会闲鱼开店赚钱(34节课)

课程目录 1&#xff0c;闲鱼更货出售主要核心原理.mp4 2、闲鱼前期开店准备.mp4 3.账号基础信息设置1.mp4 4、提升账号权重.mp4 5、注意避免违规行为.mp4 6、实接课 应该怎么选择爆款产品.mp4 7、分析商品的闲鱼市场.mp4 8、寻找最低价货源.mp4 9、怎么寻我优质的货源…

leetcode 239. 滑动窗口最大值、347.前 K 个高频元素

leetcode 239. 滑动窗口最大值、347.前 K 个高频元素 leecode 239. 滑动窗口最大值 题目链接 &#xff1a;https://leetcode.cn/problems/sliding-window-maximum/description/ 题目 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的…

Nginx Proxy Manager 单机多Docker Compose 反向代理配置

同步发表于我的个人博客 问题描述 单机下部署多个docker-compose, 并用nginx proxy manager 反代其他docker compose的流量&#xff0c;出现连不上其他docker compose 下的container的问题 尝试过的解决方式 1、地址用docker0的地址&#xff0c;端口用其他container暴露出来…

VOS3000被DDOS攻击后该怎么办

VOS3000遭受DDoS攻击的应对措施 当VOS3000遭受DDoS攻击时&#xff0c;可以采取以下几个步骤来应对&#xff1a; 立即启动防火墙&#xff1a;尽管难以完全阻止DDoS攻击&#xff0c;但防火墙可以在一定程度上帮助抵御攻击&#xff0c;减轻其造成的危害。 联系服务器提供商&#…

实现文本文件的复制

#include <stdio.h> #include <stdlib.h>int main(int argc, char *argv[]) {// 检查命令行参数的数量&#xff0c;确保包括源文件路径和目标文件路径if (argc ! 3) {printf("Usage: %s sourceFile destFile", argv[0]);exit(1);}FILE *srcFp; // 源文件…

634 · 单词矩阵

链接&#xff1a;LintCode 炼码 - ChatGPT&#xff01;更高效的学习体验&#xff01; . - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; class Solution { public: struct Trie {Trie() {next.resize(26, nullptr);end false;} std::vector<Trie*> next; b…

视频监控技术前沿探索:智能化趋势与EasyCVR视频汇聚技术应用

在数字化时代的浪潮中&#xff0c;视频监控技术以其独特的优势&#xff0c;正在安防领域书写着新的篇章。它不仅为公共安全部门提供了强大的技术支持&#xff0c;还深入到教育、政府、娱乐、医疗、酒店、运动等多个领域&#xff0c;成为维护社会秩序、保障人民安全的重要工具。…

LearnOpenGL(二十)之立方体贴图

一、创建立方体贴图 首先&#xff0c;生成一个纹理&#xff0c;并将其绑定到纹理目标GL_TEXTURE_CUBE_MAP&#xff1a; unsigned int textureID; glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_CUBE_MAP, textureID); 因为立方体贴图包含有6个纹理&#xff0…

Pytorch深度学习实践笔记3

&#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;pytorch深度学习 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质就是极致重复! 视频来自【b站刘二大人】 目录 1 梯度下降&#…