蓝牙看不到设备

时间:2018-03-28 16:01:34

标签: android bluetooth

我创建的应用程序使用蓝牙,几乎一切都很好,但这一点并不酷。所以在我连接设备后,一些工作人员保存所有他们断开连接,我的应用程序停止看到这个设备不再在我的列表上,但在5-10分钟后设备返回列表。可能是什么问题?

public class MainActivity extends AppCompatActivity {
static final int SEND_TIMES = 1;
static final int SEND_DATE = 2;

List<BluetoothDevice> devices;
Spinner devicesSpinner = null;
BluetoothAdapter bluetoothAdapter = null;
BluetoothSocket clientSocket = null;
OutputStream outputData = null;
InputStream inputData = null;
List<String> devicesNames = new ArrayList<>();

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

    if (!bluetoothAdapter.isEnabled()) {
        Intent enableRequest = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivity(enableRequest);
    }

    findDevices();

    IntentFilter filter = new IntentFilter();
    filter.addAction(BluetoothDevice.ACTION_FOUND);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
    registerReceiver(deviceFoundReceiver, filter);
    registerReceiver(bondStateChangeReceiver, filter);

    devices = new ArrayList();
    devicesSpinner = findViewById(R.id.devices_list);


    devicesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            try {
                if(devices.get(i) == null)
                    return;
                BluetoothDevice remoteDevice = bluetoothAdapter.getRemoteDevice(devices.get(i).getAddress());
                Method m = remoteDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class});
                clientSocket = (BluetoothSocket) m.invoke(remoteDevice, 1);
                outputData = clientSocket.getOutputStream();
                inputData = clientSocket.getInputStream();
            } catch (Exception e){
                Log.i("REMOTE_DEVICE", "No such a method", e);
            }
        }

        @Override
        public void onNothingSelected (AdapterView<?> adapterView){
        }
    });
    if(clientSocket != null)
        Toast.makeText(this, "" + clientSocket.isConnected(), Toast.LENGTH_LONG);
}

public void connectDevice(View view) throws IOException {
    if (isSocketConnected()) return;
    bluetoothAdapter.cancelDiscovery();
    if(!clientSocket.isConnected()){

        try {
            clientSocket.connect();
        } catch (Exception e){
            Toast.makeText(this, "Can not connect to this device try later!", Toast.LENGTH_LONG).show();
            return;
        }

        TextView textView = (TextView) findViewById(R.id.boundedDevice);
        textView.setText(clientSocket.getRemoteDevice().getName());
    }
}

public void disconnectDevice(View view) throws IOException {
    if(clientSocket.isConnected()){
        clientSocket.close();
        TextView textView = (TextView) findViewById(R.id.boundedDevice);
        textView.setText("Device not connected");
    }
}

}

这是我用于连接的代码,出了什么问题?

我想拥有的是我想在断开连接之后立即将我的设备放在我的列表中,而不是等待那5-10分钟让我的应用再次找到它。

1 个答案:

答案 0 :(得分:0)

这是客户端代码,你需要服务器端代码。所以你需要两个设备,一个设备必须是服务器,另一个设备必须是客户端。如果你想搜索可用的设备,你在服务器端工作。所有你必须在官方网站上看看android开发者蓝牙聊天项目。然后找出服务器端代码。

https://developer.android.com/samples/BluetoothChat/project.html