android - 如何检查设备是否与蓝牙连接

时间:2015-01-20 06:16:48

标签: java android

我有以下功能在启动时运行并且完美地工作。

我想在其他功能中添加if条件以检查设备是否仍然连接。

这是代码

private final  Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case BluetoothService.MESSAGE_STATE_CHANGE:
            switch (msg.arg1) {
            case BluetoothService.STATE_CONNECTED:   
                Toast.makeText(getApplicationContext(), "Connect successful",
                        Toast.LENGTH_SHORT).show();
                btnClose.setEnabled(true);
                btnSend.setEnabled(true);
                btnSendDraw.setEnabled(true);
                break;
            case BluetoothService.STATE_CONNECTING:  
                Log.d("À¶ÑÀµ÷ÊÔ","ÕýÔÚÁ¬½Ó.....");
                break;
            case BluetoothService.STATE_LISTEN:     
            case BluetoothService.STATE_NONE:
                Log.d("À¶ÑÀµ÷ÊÔ","µÈ´ýÁ¬½Ó.....");
                break;
            }
            break;
        case BluetoothService.MESSAGE_CONNECTION_LOST: 
            Toast.makeText(getApplicationContext(), "Device connection was lost",
                           Toast.LENGTH_SHORT).show();
            btnClose.setEnabled(false);
            btnSend.setEnabled(false);
            btnSendDraw.setEnabled(false);
            break;
        case BluetoothService.MESSAGE_UNABLE_CONNECT:  
            Toast.makeText(getApplicationContext(), "Unable to connect device",
                    Toast.LENGTH_SHORT).show();
            break;
        }
    }

};

其他功能就像这样开始

     @Override
     protected void onPostExecute(String result){

请帮助我!!

由于

1 个答案:

答案 0 :(得分:0)

ACL_CONNECTED / DISCONNECTED不完全可靠,我从经验中学到,因为在设备连接期间可能会多次发生这种情况(例如,如果需要引脚,则会“连接”,如果超时则会“断开连接”提供了错误的引脚。这并不一定表示连接正确)。这表示较低层连接。

如果您想使用广播接收器,最好使用特定于您使用的配置文件的广播(例如A2DP)。每个人都有自己的广播。您可以听到的另一件事是来自ConnectivityManager的Connectivity_state_changed,对于BLUETOOTH类型(还没有真正试过这个)。

此外,在没有广播接收器的情况下检查它是否已连接的方式,例如,当您想要在更新活动之前检查后台时,将通过以下方式获取配置文件对象:

mBluetoothAdapter.getProfileProxy(mContext, mA2DPProfileListener, BluetoothProfile.A2DP);

其中mA2DPProfileListenerServiceListener对象:

<code>
private ServiceListener mA2DPProfileListener = new ServiceListener(){
//anonymous inner type. etc.
    public void onServiceConnected(int profile, BluetoothProfile proxy) {
        //cast the BluetoothProfile object to the profile you need, say 
        //BluetoothA2DP proxyA2DP = (BluetoothA2DP) proxy;
        int currentState = proxyA2DP.getConnectionState(mDevice);
        //mDevice is the BluetoothDevice object you can get from
        //BluetoothAdapter.getRemote...
    }

    public void onServiceDisconnected(int profile) {
    }
}
</code>

您可以查看currentState指向的内容,并确定设备是否已连接/断开/连接等。

HTH, Sreedevi。