前言
半年没有更新博客了,首要原因就是我太懒了,其次是换了新工作,新环境,一直都处于适应与学习阶段,因为涉及到的领域以前都是没接触的–有幸外派到海尔做智能家居,第一次到这种大的公司来敲代码,很多东西都和之前不太一样了,以前一个需求只要做出来就行,不管你用什么方式,现在都是必须用什么实现,比如:代码架构必须是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下载地址:点击下载