欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

虾扯蓝牙(一)获取蓝牙当前状态,监听蓝牙手动开关,代码开关蓝牙

程序员文章站 2024-03-22 21:48:16
...

前言

半年没有更新博客了,首要原因就是我太懒了,其次是换了新工作,新环境,一直都处于适应与学习阶段,因为涉及到的领域以前都是没接触的–有幸外派到海尔做智能家居,第一次到这种大的公司来敲代码,很多东西都和之前不太一样了,以前一个需求只要做出来就行,不管你用什么方式,现在都是必须用什么实现,比如:代码架构必须是clean architecture干净架构,干净架构的presentation层必须用MVVP或者MVP,网络框架必须是RxJava+Retrofit……不会就得埋头学,代码也是有一套规范,审核几次才能入库等等,每个功能模块都封装成一个远程依赖库,需要什么功能就加什么依赖,记得刚来的时候,领导让我把主工程库clone下来熟悉代码,我打开项目完全是懵逼的状态,里面啥都没有,但是跑起来是一个功能强大的app,我的天啊,MainActivity都找不到,怎么撸代码,直到我打开了gradle,十几个远程依赖….扯远了,前几天接了一个蓝牙设备,总结一下相关知识,以备我后时之需,因为东西还不少,所以分开写

正文

0,添加权限

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

1,获取手机当前蓝牙的状态

  /**
     * 初始化蓝牙的状态
     */
    private void initBtState() {
        //获取蓝牙适配器
        btAdapter = BluetoothAdapter.getDefaultAdapter();
        //蓝牙当前的状态,true代表蓝牙是开启的,false代表是关闭状态
        boolean enabled = btAdapter.isEnabled();
        String strState = "";
        if (enabled) {
            strState = "开启";
        } else {
            strState = "关闭";
        }
        setBtState(strState);
    }

2,监听蓝牙手动开关

1),注册监听广播

 /**
     * 注册监听蓝牙状态广播
     */
    private void registerBtReceiver() {
        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        registerReceiver(btStateReceiver, filter);
    }

2)传入广播接收器来接收蓝牙被打开被关闭

/**
     * 蓝牙action接收,当用户手动开关蓝牙的时候回回调到这里
     */
    BroadcastReceiver btStateReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //手动开关蓝牙会触发这个接收器,然后拿到蓝牙当前的状态
            int blueState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
            String strState = "";
            switch (blueState) {
                case BluetoothAdapter.STATE_ON://蓝牙被打开
                    strState = "开启";
                    break;
                case BluetoothAdapter.STATE_OFF://蓝牙被关闭:
                    strState = "关闭";
                    break;
                case BluetoothAdapter.STATE_TURNING_ON://蓝牙正在打开:
                    strState = "正在开启";
                    break;
                case BluetoothAdapter.STATE_TURNING_OFF://蓝牙正在关闭:
                    strState = "正在关闭";
                    break;
            }
            setBtState(strState);
        }
    };

3,用代码关闭和开启蓝牙

1),开启 有2中方式

 /**
     * 打开蓝牙
     *
     * @param isSilent 打开蓝牙的方式
     *                 false--通知方式打开 true 不提示直接开(不太友好)
     */
    private void openBt(boolean isSilent) {
        if (isSilent) {
            btAdapter.enable();
        } else {
            Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivity(intent);
        }
    }

虾扯蓝牙(一)获取蓝牙当前状态,监听蓝牙手动开关,代码开关蓝牙

2)关闭蓝牙

/**
     * 关闭蓝牙
     */
    private void closeBt() {
        btAdapter.disable();
    }

完整的activity代码:

package com.duanlian.btdemo;

import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity
            implements View.OnClickListener {
    private TextView tvBtState;
    private Button btnOpenBt;
    private Button btnCloseBt;
    private BluetoothAdapter btAdapter;

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

    }

    @Override
    protected void onResume() {
        super.onResume();
        registerBtReceiver();//注册蓝牙状态监听
        initBtState();//初始化蓝牙状态
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterBtReceiver();
    }

    /**
     * 初始化蓝牙的状态
     */
    private void initBtState() {
        //获取蓝牙适配器
        btAdapter = BluetoothAdapter.getDefaultAdapter();
        //蓝牙当前的状态,true代表蓝牙是开启的,false代表是关闭状态
        boolean enabled = btAdapter.isEnabled();
        String strState = "";
        if (enabled) {
            strState = "开启";
        } else {
            strState = "关闭";
        }
        setBtState(strState);
    }

    /**
     * 注册监听蓝牙状态广播
     */
    private void registerBtReceiver() {
        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        registerReceiver(btStateReceiver, filter);
    }

    /**
     * 注销蓝牙监听广播
     */
    private void unregisterBtReceiver() {
        unregisterReceiver(btStateReceiver);
    }

    /**
     * 蓝牙action接收,当用户手动开关蓝牙的时候回回调到这里
     */
    BroadcastReceiver btStateReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //手动开关蓝牙会触发这个接收器,然后拿到蓝牙当前的状态
            int blueState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
            String strState = "";
            switch (blueState) {
                case BluetoothAdapter.STATE_ON://蓝牙被打开
                    strState = "开启";
                    break;
                case BluetoothAdapter.STATE_OFF://蓝牙被关闭:
                    strState = "关闭";
                    break;
                case BluetoothAdapter.STATE_TURNING_ON://蓝牙正在打开:
                    strState = "正在开启";
                    break;
                case BluetoothAdapter.STATE_TURNING_OFF://蓝牙正在关闭:
                    strState = "正在关闭";
                    break;
            }
            setBtState(strState);
        }
    };

    private void initView() {
        tvBtState = (TextView) findViewById(R.id.tvBtState);
        btnOpenBt = (Button) findViewById(R.id.btnOpenBt);
        btnCloseBt = (Button) findViewById(R.id.btnCloseBt);
        btnOpenBt.setOnClickListener(this);
        btnCloseBt.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id) {
            case R.id.btnOpenBt://打开蓝牙
                openBt(false);
                break;
            case R.id.btnCloseBt://关闭蓝牙
                closeBt();
                break;
        }
    }

    /**
     * 打开蓝牙
     *
     * @param isSilent 打开蓝牙的方式
     *                 false--通知方式打开 true 不提示直接开(不太友好)
     */
    private void openBt(boolean isSilent) {
        if (isSilent) {
            btAdapter.enable();
        } else {
            Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivity(intent);
        }
    }

    /**
     * 关闭蓝牙
     */
    private void closeBt() {
        btAdapter.disable();
    }

    private void setBtState(String state) {
        tvBtState.setText(state);
    }
}

demo下载地址:点击下载

相关标签: 蓝牙