首页 > 解决方案 > 如何使用异步任务以编程方式检查蓝牙是否已与其他设备连接?

问题描述

我需要在异步任务的 doInBackground 方法中检查是否有任何设备已连接并通过蓝牙与我的设备通信。如果已连接/正在通信 - 将 toast 消息显示为“已连接”。如果不显示为“未连接设备”。

我到处搜索,但没有一个答案能满足我的要求。

标签: androidandroid-asynctaskandroid-bluetooth

解决方案


我不详细了解您的问题,但我的解决方案是用于蓝牙适配器的 BroadhastReceiver。

public class AnyActivity extends AppCompatActivity {

private BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
private static boolean isConnected = false;
private static boolean isConnecting = false;
private static boolean isDisdconected = false;

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

        IntentFilter BT_ConState_filter  = new 
        IntentFilter(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);

        this.registerReceiver(BR_BT_ConState, BT_ConState_filter);
}

BroadcastReceiver BR_BT_ConState =new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action_BR_BT_ConState =intent.getAction();
            int iBR_BT_ConState_state = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, mBluetoothAdapter.ERROR);

            if (action_BR_BT_ConState.equals(mBluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED))
            {
                switch (iBR_BT_ConState_state) {
                    case BluetoothAdapter.STATE_CONNECTING:
                        Toast.makeText(this, "Connecting" ,Toast.LENGTH_SHORT).show();
                        isConnected = false;
                        isConnecting = true;
                        isDisdconected = false;
                        break;

                    case BluetoothAdapter.STATE_CONNECTED:
                        Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
                        isConnected = true;
                        isConnecting = false;
                        isDisdconected = false;
                        break;

                    case BluetoothAdapter.STATE_DISCONNECTED:
                        Toast.makeText(this, "Disconected", Toast.LENGTH_SHORT).show();
                        isConnected = false;
                        isConnecting = false;
                        isDisdconected = true;
                        break;
                }
            }
        }
    };

public static boolean isConnected(){
return isConnected;
}

public static boolean isDisConnected(){
return isDisConnected;
}

public static boolean isConnecting(){
return isDisConnected;
}

@Override
    protected void onDestroy(){
        super.onDestroy();
        context.unregisterReceiver(BR_BT_ConState);
    }
}

如果你告诉我你到底想做什么,例如:根据状态运行一些代码,执行一些 TextView 更改,或者类似回调方法,

或者还有什么,我可以尝试为您提供更多帮助。

我现在所做的是创建一些静态函数,您应该能够在 AsynkTask 中调用,只需调用即可AnyActivity.isConnected()获得返回的 BluetoothAdapter 的当前状态。


推荐阅读