android中将蓝牙设置为始终可发现模式

BlueAlwaysDiscoverableReceiver.java

java 复制代码
package com.ks.xybase.receiver;

import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;


import com.ks.xybase.utils.L;

import java.lang.reflect.Method;
import java.util.Objects;

//蓝牙设置为始终可发现模式
public class BlueAlwaysDiscoverableReceiver extends BroadcastReceiver {
    private static final String TAG = "BlueAlwaysDiscoverableR";
    private Context mContext;
    private BluetoothAdapter mBluetoothAdapter;
    private IntentFilter mIntentFilter;

    public BlueAlwaysDiscoverableReceiver(Context context) {
        mContext = context;
        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        mIntentFilter = new IntentFilter();
        mIntentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED);
    }

    public void start() {
        mContext.registerReceiver(this, mIntentFilter);
        setBlueCanVisible();
    }

    public void stop() {
        mContext.unregisterReceiver(this);
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (!Objects.equals(action, BluetoothAdapter.ACTION_SCAN_MODE_CHANGED)) {
            return;
        }
        setBlueCanVisible();
    }

    private void setBlueCanVisible() {
        try {
            Method setScanModeMethod = BluetoothAdapter.class.getMethod("setScanMode", int.class);
            setScanModeMethod.setAccessible(true);
            setScanModeMethod.invoke(mBluetoothAdapter, BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE);
        } catch (Exception e) {
            L.d(TAG, "error when setBlueCanVisible,e==" + e.getMessage());
        }
    }
}

然后在activity中

java 复制代码
private BlueAlwaysDiscoverableReceiver mBlueAlwaysDiscoverableReceiver;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //设置蓝牙为始终被发现模式
        mBlueAlwaysDiscoverableReceiver = new BlueAlwaysDiscoverableReceiver(this);
        mBlueAlwaysDiscoverableReceiver.start();
    }

 @Override
    protected void onDestroy() {
        mBlueAlwaysDiscoverableReceiver.stop();
        super.onDestroy();
    }
相关推荐
Dxy12393102168 分钟前
Python使用XPath定位元素:动态计算与函数调用
开发语言·python
一块小土坷垃18 分钟前
# 《电影猎手》观影伴侣:一款支持iOS/安卓/电视盒子的全平台影视工具“电影猎手”(附自用评价)
android·ios·电视盒子
Evand J21 分钟前
【MATLAB代码介绍】三种CT模型的IMM(交互式多模型)对目标高精度定位
开发语言·matlab·ct·imm·交互式多模型·多模型·转弯
AC赳赳老秦24 分钟前
OpenClaw权限管理实操:团队共享Agent,设置操作权限,保障数据安全
服务器·开发语言·前端·javascript·excel·deepseek·openclaw
geovindu36 分钟前
go: Proxy Pattern
开发语言·后端·设计模式·golang·代理模式
langsiming41 分钟前
【无标题】
java·开发语言·数据库
꧁细听勿语情꧂42 分钟前
合并两个有序表、判断链表的回文结构、相交链表、环的链表一和二
c语言·开发语言·数据结构·算法
Rust语言中文社区44 分钟前
【Rust日报】2026-04-24 Vizia 0.4 发布——纯 Rust 声明式响应式 GUI 框架
开发语言·后端·rust
普通网友1 小时前
JavaScript:ESLint+Prettier 规范代码格式
开发语言·javascript·ecmascript
t***5441 小时前
如何在 Dev-C++ 中切换编译器
java·开发语言·c++