如何检测我的android设备何时与配对的蓝牙设备建立连接/断开连接 [英] How to detect whenever my android device gets connected/disconnected from paired bluetooth device

查看:217
本文介绍了如何检测我的android设备何时与配对的蓝牙设备建立连接/断开连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望收到一个事件以检测蓝牙何时在我的设备中配对或取消配对.

I would like to receive an event for detecting whenever bluetooth gets paired or unpaired in my device.

在一开始,我发现 http://developer.android.com/reference/android/bluetooth/BluetoothServerSocket.html .

不用说,我对蓝牙实现没有用,我很了解:

Needless to say, I have no use for bluetooth implementation, which i'm well aware of :

 final BluetoothAdapter.LeScanCallback bleScanCallback = new BluetoothAdapter.LeScanCallback() {

            @Override
            public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) { ... }
}

任何帮助将不胜感激.

我想我应该找到一种访问这些类之一的方法:BluetoothBondStateMachine,BTConnectionReceiver,BluetoothBondStateMachine这将是一个不错的开始,因为无论何时创建配对/取消配对,我都可以在logcat中看到这些类可以检测到它.

I'm thinking i should find a way to access one of those classes : BluetoothBondStateMachine, BTConnectionReceiver, BluetoothBondStateMachine which will be a nice start, since i can see that in the logcat whenever pairing / unpairing is created, those classes detect it.

07-28 18:05:49.284    8332-8332/? I/BTConnectionReceiver﹕ onReceive(context, Intent { act=android.bluetooth.device.action.ACL_CONNECTED flg=0x4000010 cmp=com.google.android.googlequicksearchbox/com.google.android.search.core.service.BluetoothConnectionReceiver (has extras) }, [BluetoothDevice: address=F2:3F:FB:30:A1:75, alias=null, name=Shine, majorDeviceClass=7936, deviceClass=7936]
07-28 18:05:49.285    8332-8332/? I/BluetoothClassifier﹕ Bluetooth Device Name: Shine
07-28 18:05:49.830  19769-19793/? W/bt_smp﹕ smp_send_id_info
07-28 18:05:49.836  19769-19786/? I/BluetoothBondStateMachine﹕ bondStateChangeCallback: Status: 0 Address: F2:3F:FB:30:A1:75 newState: 2
07-28 18:05:49.838  19769-19787/? I/BluetoothBondStateMachine﹕ Bond State Change Intent:F2:3F:FB:30:A1:75 OldState: 11 NewState: 12
07-28 18:05:49.838  19769-19787/? I/BluetoothBondStateMachine﹕ StableState(): Entering Off State
07-28 18:05:50.564  19769-19793/? E/bt_att﹕ gatt_disc_cmpl_cback() - Register for service changed indication failure
07-28 18:05:51.189  19769-19793/? W/bt_bta_gattc﹕ bta_gattc_explore_srvc no more services found
07-28 18:05:51.191  19769-19793/? I/bt_bta_dm﹕ bta_dm_gatt_disc_result service_id_uuid_len=2

推荐答案

最后,在听完蓝牙必须提供的所有事件之后,我认为我只需要听 BluetoothDevice.ACTION_BOND_STATE_CHANGED并从发送的意图中检测数据.如果有人在这个问题上遇到困难,希望对您有所帮助.

So, in the end, after listening to all the events the bluetooth has to offer, i figured that i just need to listen to BluetoothDevice.ACTION_BOND_STATE_CHANGED and detect the data from the intent sent. If anyone is stuck on this issue, i hope it'll help you.

我的完整代码:

public class MainActivity extends Activity {

    private TextView mTextLog;

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

        mTextLog = (TextView) findViewById(R.id.text_log);

        registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED));
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mReceiver);
    }

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE,
                    BluetoothDevice.ERROR);

            if (state == BluetoothDevice.BOND_BONDED) {
                attachText("Device " + device + " PAIRED");
            } else if (state == BluetoothDevice.BOND_BONDING) {
                attachText("Device " + device + " pairing is in process...");
            } else if (state == BluetoothDevice.BOND_NONE) {
                attachText("Device " + device + " is unpaired");
            } else {
                attachText("Device " + device + " is in undefined state");
            }
        }
    };

    private void attachText(String text) {
        String currentText = mTextLog.getText() == null ? "" : mTextLog.getText().toString();
        mTextLog.setText(currentText + "\n" + text);
    }
}

这篇关于如何检测我的android设备何时与配对的蓝牙设备建立连接/断开连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆