package com.kson.bluetoothdemo;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import com.kson.bluetoothdemo.adapter.MyBlueAdapter;
import com.kson.bluetoothdemo.chat.ChatActivity;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{
private BluetoothAdapter mBlueAdapter;
private List<BluetoothDevice> mDevices;
private MyBlueAdapter mAdapter;
private ListView mListView;
private MyReceiver mReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
//注册广播接收器,用于接收蓝牙相关广播
registerBluetoothReceiver();
}
/**
* 注册蓝牙广播
*/
private void registerBluetoothReceiver() {
mReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);//状态改变action
filter.addAction(BluetoothDevice.ACTION_FOUND);//设备发现action
registerReceiver(mReceiver, filter);//注册
}
private void initView() {
mListView = (ListView) findViewById(R.id.lv_blue);
}
private void initData() {
mDevices = new ArrayList<>();
mBlueAdapter = BluetoothAdapter.getDefaultAdapter();
mBlueAdapter.enable();
}
/**
* 搜索蓝牙设备
*
* @param view
*/
public void search(View view) {
searchBondedDevices();
searchUnBondDevices();
setAdapter();
}
/**
* 设置适配器,刷新数据
*/
private void setAdapter() {
if (mAdapter == null) {
mAdapter = new MyBlueAdapter(this, mDevices);
mListView.setAdapter(mAdapter);
} else {
mAdapter.notifyDataSetChanged();
}
}
/**
* 搜索未配对的蓝牙设备
*/
private void searchUnBondDevices() {
if (mBlueAdapter.isDiscovering()){
mBlueAdapter.cancelDiscovery();
}
mBlueAdapter.startDiscovery();
}
/**
* 搜索已配对的蓝牙设备
*/
private void searchBondedDevices() {
Set<BluetoothDevice> bondedDevices = mBlueAdapter.getBondedDevices();
for (BluetoothDevice bondedDevice : bondedDevices) {
if (!mDevices.contains(bondedDevice)){
mDevices.add(bondedDevice);
}
}
}
/**
* listview点击事件
* @param adapterView
* @param view
* @param i
* @param l
*/
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//得到点击条目的蓝牙对象
BluetoothDevice device = (BluetoothDevice) mAdapter.getItem(i);
//如果状态是已配对状态
if (device.getBondState()==BluetoothDevice.BOND_BONDED){
Intent intent = new Intent(this, ChatActivity.class);
intent.putExtra("address",device.getAddress());
startActivity(intent);
}else{//其他状态
try {
Class<BluetoothDevice> clz = BluetoothDevice.class;
Method method = clz.getMethod("createBond",null);
method.invoke(clz,null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 广播接收器
*/
class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (action.equals(BluetoothDevice.ACTION_FOUND)){//处理发现蓝牙设备逻辑,添加到集合list
if (!mDevices.contains(device)){
mDevices.add(device);
}
setAdapter();
}else if(action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)){//监听蓝牙状态改变
int state = device.getBondState();
switch (state){
case BluetoothDevice.BOND_BONDED:
mDevices.remove(device);
mDevices.add(0,device);
setAdapter();
break;
case BluetoothDevice.BOND_BONDING:
Toast.makeText(MainActivity.this,"正在配对",Toast.LENGTH_SHORT).show();
break;
case BluetoothDevice.BOND_NONE:
Toast.makeText(MainActivity.this,"取消配对",Toast.LENGTH_SHORT).show();
break;
}
}
}
}
}
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import com.kson.bluetoothdemo.adapter.MyBlueAdapter;
import com.kson.bluetoothdemo.chat.ChatActivity;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener{
private BluetoothAdapter mBlueAdapter;
private List<BluetoothDevice> mDevices;
private MyBlueAdapter mAdapter;
private ListView mListView;
private MyReceiver mReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
//注册广播接收器,用于接收蓝牙相关广播
registerBluetoothReceiver();
}
/**
* 注册蓝牙广播
*/
private void registerBluetoothReceiver() {
mReceiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);//状态改变action
filter.addAction(BluetoothDevice.ACTION_FOUND);//设备发现action
registerReceiver(mReceiver, filter);//注册
}
private void initView() {
mListView = (ListView) findViewById(R.id.lv_blue);
}
private void initData() {
mDevices = new ArrayList<>();
mBlueAdapter = BluetoothAdapter.getDefaultAdapter();
mBlueAdapter.enable();
}
/**
* 搜索蓝牙设备
*
* @param view
*/
public void search(View view) {
searchBondedDevices();
searchUnBondDevices();
setAdapter();
}
/**
* 设置适配器,刷新数据
*/
private void setAdapter() {
if (mAdapter == null) {
mAdapter = new MyBlueAdapter(this, mDevices);
mListView.setAdapter(mAdapter);
} else {
mAdapter.notifyDataSetChanged();
}
}
/**
* 搜索未配对的蓝牙设备
*/
private void searchUnBondDevices() {
if (mBlueAdapter.isDiscovering()){
mBlueAdapter.cancelDiscovery();
}
mBlueAdapter.startDiscovery();
}
/**
* 搜索已配对的蓝牙设备
*/
private void searchBondedDevices() {
Set<BluetoothDevice> bondedDevices = mBlueAdapter.getBondedDevices();
for (BluetoothDevice bondedDevice : bondedDevices) {
if (!mDevices.contains(bondedDevice)){
mDevices.add(bondedDevice);
}
}
}
/**
* listview点击事件
* @param adapterView
* @param view
* @param i
* @param l
*/
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//得到点击条目的蓝牙对象
BluetoothDevice device = (BluetoothDevice) mAdapter.getItem(i);
//如果状态是已配对状态
if (device.getBondState()==BluetoothDevice.BOND_BONDED){
Intent intent = new Intent(this, ChatActivity.class);
intent.putExtra("address",device.getAddress());
startActivity(intent);
}else{//其他状态
try {
Class<BluetoothDevice> clz = BluetoothDevice.class;
Method method = clz.getMethod("createBond",null);
method.invoke(clz,null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 广播接收器
*/
class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (action.equals(BluetoothDevice.ACTION_FOUND)){//处理发现蓝牙设备逻辑,添加到集合list
if (!mDevices.contains(device)){
mDevices.add(device);
}
setAdapter();
}else if(action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)){//监听蓝牙状态改变
int state = device.getBondState();
switch (state){
case BluetoothDevice.BOND_BONDED:
mDevices.remove(device);
mDevices.add(0,device);
setAdapter();
break;
case BluetoothDevice.BOND_BONDING:
Toast.makeText(MainActivity.this,"正在配对",Toast.LENGTH_SHORT).show();
break;
case BluetoothDevice.BOND_NONE:
Toast.makeText(MainActivity.this,"取消配对",Toast.LENGTH_SHORT).show();
break;
}
}
}
}
}