蓝牙搜索

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;
                }

            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值