Java Android中的蓝牙客户端服务器示例

Java Android中的蓝牙客户端服务器示例,java,android,bluetooth,client-server,Java,Android,Bluetooth,Client Server,我正在制作一个简单的客户机-服务器应用程序,可以用来传输整数、字符串或字符 我的应用程序已成功编译,但没有客户端-服务器连接。 当我尝试搜索服务器时,它会在行中给出NullPointerException bluetooth.startDiscovery(); 但是,当我启动服务器时,它不会出现异常 此外,当我在一台设备上启动服务器并在另一台设备上查找服务器时,由于服务器正常运行或客户端出现问题,连接无法建立 我已经有一个BluetoothAdapter的实例使用 bluetooth = Bl

我正在制作一个简单的客户机-服务器应用程序,可以用来传输整数、字符串或字符

我的应用程序已成功编译,但没有客户端-服务器连接。 当我尝试搜索服务器时,它会在行中给出NullPointerException

bluetooth.startDiscovery();
但是,当我启动服务器时,它不会出现异常

此外,当我在一台设备上启动服务器并在另一台设备上查找服务器时,由于服务器正常运行或客户端出现问题,连接无法建立

我已经有一个BluetoothAdapter的实例使用

bluetooth = BluetoothAdapter.getDefaultAdapter();
我想可能是因为我在onclickListener中调用startDiscovery()方法,所以给出了一个空指针

private void setupSearchButton() {
    Button searchButton = (Button) findViewById(R.id.button_search);
    searchButton.setOnClickListener(new OnClickListener() {

        public void onClick(View view) {
            registerReceiver(discoveryResult, new IntentFilter(BluetoothDevice.ACTION_FOUND));
            if (!bluetooth.isDiscovering()) {
              try {  foundDevices.clear();
                bluetooth.startDiscovery(); } catch(Exception e)
                {
                Context c = getApplicationContext();
                    Toast.makeText(c, e.toString(),Toast.LENGTH_LONG).show();

                }
            }
        }
    });
}
用于声明服务器的代码发布在此处:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == DISCOVERY_REQUEST) {
        boolean isDiscoverable = resultCode > 0;
        if (isDiscoverable) {
            String name = "bluetoothserver";
            try {
                final BluetoothServerSocket btserver = bluetooth.listenUsingRfcommWithServiceRecord(name, uuid);
                AsyncTask<Integer, Void, BluetoothSocket> acceptThread = new AsyncTask<Integer, Void, BluetoothSocket>() {

                    @Override
                    protected BluetoothSocket doInBackground(Integer... params) {

                        try {
                            socket = btserver.accept(params[0] * 1000);
                            return socket;
                        } catch (Exception e) {
                            Log.d("BLUETOOTH SERVER EXCEPTION : ", e.getMessage());
                        }

                        return null;
                    }

                    @Override
                    protected void onPostExecute(BluetoothSocket result) {
                        if (result != null) {
                            switchUI();
                        }
                    }
                };
                acceptThread.execute(resultCode);
            } catch (IOException e) {
                Log.d("BLUETOOTH", e.getMessage());
            }
        }
    }
}
@覆盖
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
if(requestCode==发现请求){
布尔isDiscoverable=resultCode>0;
如果(isDiscoverable){
String name=“bluetoothserver”;
试一试{
最终BluetoothServerSocket btserver=bluetooth.listenUsingRfcommWithServiceRecord(名称,uuid);
AsyncTask acceptThread=新建AsyncTask(){
@凌驾
受保护的BluetoothSocket doInBackground(整数…参数){
试一试{
socket=btserver.accept(参数[0]*1000);
返回插座;
}捕获(例外e){
Log.d(“蓝牙服务器异常:,e.getMessage());
}
返回null;
}
@凌驾
受保护的void onPostExecute(BluetoothSocket结果){
如果(结果!=null){
switchUI();
}
}
};
acceptThread.execute(resultCode);
}捕获(IOE异常){
Log.d(“蓝牙”,例如getMessage());
}
}
}
}

有人能告诉我是什么问题吗?我使用两个按钮,一个启动蓝牙服务器,另一个搜索蓝牙服务器。单击start bluetooth server(启动蓝牙服务器)按钮时运行的方法会触发startActivityForResult,其结果是执行ActivityResult方法,如下所示。此处已显示OnClickListener for search server按钮。

您是否在
AndroidManifest.xml
中使用蓝牙权限?是。蓝牙和蓝牙管理