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();
    }
相关推荐
霍霍哈嗨11 分钟前
【QT基础】创建项目&项目代码解释
开发语言·qt
friklogff11 分钟前
【C#生态园】从图像到视觉:Emgu.CV、AForge.NET、OpenCvSharp 全面解析
开发语言·c#·.net
虚拟搬运工1 小时前
Python类及元类的创建流程
开发语言·chrome·python
消失的旧时光-19431 小时前
kotlin的密封类
android·开发语言·kotlin
A_cot1 小时前
Redis 的三个并发问题及解决方案(面试题)
java·开发语言·数据库·redis·mybatis
学步_技术1 小时前
Python编码系列—Python原型模式:深克隆与高效复制的艺术
开发语言·python·原型模式
alden_ygq1 小时前
GCP容器镜像仓库使用
java·开发语言
苹果酱05672 小时前
一文读懂SpringCLoud
java·开发语言·spring boot·后端·中间件
Eoneanyna2 小时前
QT设置git仓库
开发语言·git·qt
小鹿( ﹡ˆoˆ﹡ )2 小时前
Python中的树与图:构建复杂数据结构的艺术
开发语言·python