简体   繁体   English

将蓝牙从android连接到计算机(配对的设备)

[英]Connect bluetooth from android to computer(paired devices)

So, i want my application to connect to my pc and then use android as a touch pad. 所以,我希望我的应用程序连接到我的电脑,然后将android用作触摸板。 Iv been doing a lot of research on the net, but I didn't find anywhere how to exactly connect my phone to pc. 我在网上进行了大量研究,但是我找不到任何将手机准确连接到PC的方法。 I made the pair device function and everything else, I just need the connection method, or at least how could it be done. 我完成了配对设备的功能以及其他所有工作,我只需要连接方法,或者至少应该怎么做。 Here is the code: 这是代码:

public class MainActivity extends Activity {
private BluetoothAdapter adapter;
private Intent turnOn;
private Set<BluetoothDevice> pairedDevices;
private ListView lv;
private Button on,off,pairedDevice,discoverable,nearDevices;
private List<BluetoothDevice> discoveredDevices = new ArrayList<BluetoothDevice>();
private  Handler mHandler;
private static final UUID MY_UUID = UUID.fromString("04c6093b-0000-1000-8000-00805f9b34fb");
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initialize();
    buttonFunc();
    find();
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}



public void lista(int i){
    if(i==0) {
        final DeviceAdapter deviceAdapter = new DeviceAdapter(MainActivity.this, discoveredDevices);
        lv.setAdapter(deviceAdapter);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                pairDevice(deviceAdapter.getItem(position));
                Message.message(MainActivity.this, deviceAdapter.getItem(position).getName().toString());
            }
        });
    }
    else if(i == 1){
        List<BluetoothDevice> vecUpareni = new ArrayList<BluetoothDevice>();

        for (BluetoothDevice bt:adapter.getBondedDevices()){
            vecUpareni.add(bt);
        }
        final DeviceAdapter deviceAdapter = new DeviceAdapter(MainActivity.this,  vecUpareni);
        lv.setAdapter(deviceAdapter);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String adresa = deviceAdapter.getItem(position).getAddress();
                Method connect = getConnectMethod();
                BluetoothDevice device = deviceAdapter.getItem(position);


            }
        });
    }
}


private Method getConnectMethod () {
    try {
        return BluetoothA2dp.class.getDeclaredMethod("connect", BluetoothDevice.class);
    } catch (NoSuchMethodException ex) {
        Message.message(MainActivity.this , "Unable to connect");
        return null;
    }
}


private void pairDevice(BluetoothDevice device) {
    try {
        Log.d("pairDevice()", "Start Pairing...");
        Method m = device.getClass().getMethod("createBond", (Class[]) null);
        m.invoke(device, (Object[]) null);
        Log.d("pairDevice()", "Pairing finished.");
    } catch (Exception e) {
        Log.e("pairDevice()", e.getMessage());
    }
}

public void buttonFunc(){
    on.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(turnOn,0);
            Message.message(MainActivity.this , "Bluetooth enabled");
        }
    });
    off.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            adapter.disable();
        }
    });
    pairedDevice.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        lista(1);
        }
    });
    discoverable.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent discoverableIntent = new
                    Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
            discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 1);
            startActivity(discoverableIntent);
        }
    });
    nearDevices.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            lista(0);
        }
    });
}



public void find(){
    IntentFilter filter = new IntentFilter();

    filter.addAction(BluetoothDevice.ACTION_FOUND);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);

    registerReceiver(mReceiver, filter);
    adapter.startDiscovery();
}

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
            //discovery starts, we can show progress dialog or perform other tasks
        } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
            //discovery finishes, dismis progress dialog
        } else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            //bluetooth device found
            BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            discoveredDevices.add(device);
            Message.message(MainActivity.this, "Found device " + device.getName());
            lista(0);
        }
    }
};






public void initialize(){
    on = (Button) findViewById(R.id.ON);
    off = (Button) findViewById(R.id.OFF);
    pairedDevice = (Button) findViewById(R.id.pairedDevices);
    nearDevices = (Button) findViewById(R.id.nearDevices);
    discoverable = (Button) findViewById(R.id.makeDiscoverable);
    lv = (ListView) findViewById(R.id.listaUredjaja);
    adapter = BluetoothAdapter.getDefaultAdapter();
    if(adapter == null){
        System.out.close();
    }
    if(adapter.isEnabled()){
        Message.message(MainActivity.this , "Enabled");
    }
    else{
        Message.message(MainActivity.this , "Not enabled");
    }
}

} }

And here is the server that is on my pc that is awaiting connection: 这是我的PC上正在等待连接的服务器:

public class Mejn {

//start server
private void startServer() throws IOException{

    //Create a UUID for SPP
    UUID uuid = new UUID("1101", true);
    //Create the servicve url
    String connectionString = "btspp://localhost:" + uuid +";name=Sample SPP Server";

    //open server url
    StreamConnectionNotifier streamConnNotifier = (StreamConnectionNotifier)Connector.open( connectionString );

    //Wait for client connection
    System.out.println("\nServer Started. Waiting for clients to connect...");
    StreamConnection connection=streamConnNotifier.acceptAndOpen();

    RemoteDevice dev = RemoteDevice.getRemoteDevice(connection);
    System.out.println("Remote device address: "+dev.getBluetoothAddress());
    System.out.println("Remote device name: "+dev.getFriendlyName(true));

    //read string from spp client
    InputStream inStream=connection.openInputStream();
    BufferedReader bReader=new BufferedReader(new InputStreamReader(inStream));
    String lineRead=bReader.readLine();
    System.out.println(lineRead);

    //send response to spp client
    OutputStream outStream=connection.openOutputStream();
    PrintWriter pWriter=new PrintWriter(new OutputStreamWriter(outStream));
    pWriter.write("Response String from SPP Server\r\n");
    pWriter.flush();

    pWriter.close();
    streamConnNotifier.close();

}


public static void main(String[] args) throws IOException {

    //display local device address and name
    LocalDevice localDevice = LocalDevice.getLocalDevice();
    System.out.println("Address: "+localDevice.getBluetoothAddress());
    System.out.println("Name: "+localDevice.getFriendlyName());

    Mejn sampleSPPServer=new Mejn();
    sampleSPPServer.startServer();

}

} }

So, while looking more, found this somewhere and put it in my code, here is the code: 因此,在查找更多内容的同时,将其找到并放在我的代码中,下面是代码:

public class MainActivity extends Activity {
private BluetoothAdapter adapter;
private Intent turnOn;
private Set<BluetoothDevice> pairedDevices;
private ListView lv;
private Button on,off,pairedDevice,discoverable,nearDevices;
private List<BluetoothDevice> discoveredDevices = new ArrayList<BluetoothDevice>();
private BluetoothSocket btSocket = null;
public OutputStream outStream;
private static final UUID MY_UUID =
        UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static String address = "C01885BD823C";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initialize();
    buttonFunc();
    find();
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}



public void lista(int i){
    if(i==0) {
        final DeviceAdapter deviceAdapter = new DeviceAdapter(MainActivity.this, discoveredDevices);
        lv.setAdapter(deviceAdapter);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                pairDevice(deviceAdapter.getItem(position));
                Message.message(MainActivity.this, deviceAdapter.getItem(position).getName().toString());
            }
        });
    }
    else if(i == 1){
        List<BluetoothDevice> vecUpareni = new ArrayList<BluetoothDevice>();

        for (BluetoothDevice bt:adapter.getBondedDevices()){
            vecUpareni.add(bt);
        }
        final DeviceAdapter deviceAdapter = new DeviceAdapter(MainActivity.this,  vecUpareni);
        lv.setAdapter(deviceAdapter);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                BluetoothDevice device = adapter.getRemoteDevice(deviceAdapter.getItem(position).getAddress());
                try {
                    btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
                } catch (IOException e) {
                    Message.message(MainActivity.this , "In onResume() and socket create failed: " + e.toString() + ".");
                }
                adapter.cancelDiscovery();
                try {
                    btSocket.connect();
                    System.out.print("\n...Connection established and data link opened...");
                } catch (IOException e) {
                    try {
                        btSocket.close();
                    } catch (IOException e2) {
                        Message.message(MainActivity.this , "In onResume() and unable to close socket during connection failure" + e2.getMessage().toString() + ".");
                    }
                }
                try {
                    outStream = btSocket.getOutputStream();
                } catch (IOException e) {
                    Message.message(MainActivity.this , "In onResume() and output stream creation failed:" + e.getMessage() + ".");
                }
                System.out.print("\n...Sending message to server...");
                String message = "Hello from Android.\n";
                System.out.print("\n\n...The message that we will send to the server is: "+message);
                byte[] msgBuffer = message.getBytes();
                try {
                    outStream.write(message.getBytes());
                } catch (IOException e) {
                    String msg = "In onResume() and an exception occurred during write: " + e.getMessage();
                    if (address.equals("00:00:00:00:00:00"))
                        msg = msg + ".\n\nUpdate your server address from 00:00:00:00:00:00 to the correct address on line 37 in the java code";
                    msg = msg +  ".\n\nCheck that the SPP UUID: " + MY_UUID.toString() + " exists on server.\n\n";

                    Message.message(MainActivity.this , msg);
                }



            }
        });
    }
}


private Method getConnectMethod () {
    try {
        return BluetoothA2dp.class.getDeclaredMethod("connect", BluetoothDevice.class);
    } catch (NoSuchMethodException ex) {
        Message.message(MainActivity.this , "Unable to connect");
        return null;
    }
}


private void pairDevice(BluetoothDevice device) {
    try {
        Log.d("pairDevice()", "Start Pairing...");
        Method m = device.getClass().getMethod("createBond", (Class[]) null);
        m.invoke(device, (Object[]) null);
        Log.d("pairDevice()", "Pairing finished.");
    } catch (Exception e) {
        Log.e("pairDevice()", e.getMessage());
    }
}

public void buttonFunc(){
    on.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(turnOn,0);
            Message.message(MainActivity.this , "Bluetooth enabled");
        }
    });
    off.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            adapter.disable();
        }
    });
    pairedDevice.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        lista(1);
        }
    });
    discoverable.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent discoverableIntent = new
                    Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
            discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 1);
            startActivity(discoverableIntent);
        }
    });
    nearDevices.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            lista(0);
        }
    });
}



public void find(){
    IntentFilter filter = new IntentFilter();

    filter.addAction(BluetoothDevice.ACTION_FOUND);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);

    registerReceiver(mReceiver, filter);
    adapter.startDiscovery();
}

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();

        if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
            //discovery starts, we can show progress dialog or perform other tasks
        } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
            //discovery finishes, dismis progress dialog
        } else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
            //bluetooth device found
            BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            discoveredDevices.add(device);
            Message.message(MainActivity.this, "Found device " + device.getName());
            lista(0);
        }
    }
};






public void initialize(){
    on = (Button) findViewById(R.id.ON);
    off = (Button) findViewById(R.id.OFF);
    pairedDevice = (Button) findViewById(R.id.pairedDevices);
    nearDevices = (Button) findViewById(R.id.nearDevices);
    discoverable = (Button) findViewById(R.id.makeDiscoverable);
    lv = (ListView) findViewById(R.id.listaUredjaja);
    adapter = BluetoothAdapter.getDefaultAdapter();
    if(adapter == null){
        System.out.close();
    }
    if(adapter.isEnabled()){
        Message.message(MainActivity.this , "Enabled");
    }
    else{
        Message.message(MainActivity.this , "Not enabled");
    }
}

} }

And code for server: 和服务器代码:

/** * Class that implements an SPP Server which accepts single line of * message from an SPP client and sends a single line of response to the client. / ** *实现SPP服务器的类,该服务器接受来自SPP客户端的单行*消息,并向客户端发送单行响应。 */ public class Mejn { * /公共班级Mejn {

//start server
private void startServer() throws IOException{

    //Create a UUID for SPP
    UUID uuid = new UUID("1101", true);
    //Create the servicve url
    String connectionString = "btspp://localhost:" + uuid +";name=Sample SPP Server";

    //open server url
    StreamConnectionNotifier streamConnNotifier = (StreamConnectionNotifier)Connector.open( connectionString );

    //Wait for client connection
    System.out.println("\nServer Started. Waiting for clients to connect...");
    StreamConnection connection=streamConnNotifier.acceptAndOpen();

    RemoteDevice dev = RemoteDevice.getRemoteDevice(connection);
    System.out.println("Remote device address: "+dev.getBluetoothAddress());
    System.out.println("Remote device name: "+dev.getFriendlyName(true));

    //read string from spp client
    InputStream inStream=connection.openInputStream();
    BufferedReader bReader=new BufferedReader(new InputStreamReader(inStream));
    String lineRead=bReader.readLine();
    System.out.println(lineRead);

    //send response to spp client
    OutputStream outStream=connection.openOutputStream();
    PrintWriter pWriter=new PrintWriter(new OutputStreamWriter(outStream));
    pWriter.write("Response String from SPP Server\r\n");
    pWriter.flush();

    pWriter.close();

    streamConnNotifier.close();

}


public static void main(String[] args) throws IOException {

    //display local device address and name
    LocalDevice localDevice = LocalDevice.getLocalDevice();
    System.out.println("Address: "+localDevice.getBluetoothAddress());
    System.out.println("Name: "+localDevice.getFriendlyName());

    Mejn sampleSPPServer=new Mejn();
    sampleSPPServer.startServer();

}

} }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM