Connecting pc to android phone using bluetooth

£可爱£侵袭症+ 提交于 2019-12-21 21:43:46

问题


I want to establish a bluetooth connection between my pc and android phone and want to send a string from my pc to android phone. I am using Bluecove 2.1.0. I am able to discover nearby bluetooth devices Now I want to pair the devices and send string from pc to android phone Thanks in advance This is the code i am using for searching device

import java.io.OutputStream;
import java.util.ArrayList;

import javax.bluetooth.DataElement;
import javax.bluetooth.DeviceClass;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.obex.ClientSession;
import javax.obex.HeaderSet;
import javax.obex.Operation;
import javax.obex.ResponseCodes;

    public class MyDiscoveryListener implements DiscoveryListener{

        private static Object lock=new Object();
        public ArrayList<RemoteDevice> devices;

        public MyDiscoveryListener() {
            devices = new ArrayList<RemoteDevice>();
        }

        public static void main(String[] args) {
                    MyDiscoveryListener listener =  new MyDiscoveryListener();

            try{
                LocalDevice localDevice = LocalDevice.getLocalDevice();
                DiscoveryAgent agent = localDevice.getDiscoveryAgent();
                agent.startInquiry(DiscoveryAgent.GIAC, listener);

                try {
                    synchronized(lock){
                        lock.wait();
                    }
                }
                catch (InterruptedException e) {
                    e.printStackTrace();
                    return;
                }


                System.out.println("Device Inquiry Completed. ");

               UUID[] uuidSet = new UUID[1];
                uuidSet[0]=new UUID(0x1105); //OBEX Object Push service

                int[] attrIDs =  new int[] {
                        0x0100 // Service name
                };

                for (RemoteDevice device : listener.devices) {
                    agent.searchServices(
                            attrIDs,uuidSet,device,listener);


                    try {
                        synchronized(lock){
                            lock.wait();
                        }
                    }
                    catch (InterruptedException e) {
                        e.printStackTrace();
                        return;
                    }


                    System.out.println("Service search finished.");
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }



        @Override
        public void deviceDiscovered(RemoteDevice btDevice, DeviceClass arg1) {
            String name;
            try {
                name = btDevice.getFriendlyName(false);
            } catch (Exception e) {
                name = btDevice.getBluetoothAddress();
            }

            devices.add(btDevice);
            System.out.println("device found: " + name);

        }

        @Override
        public void inquiryCompleted(int arg0) {
            synchronized(lock){
                lock.notify();
            }
        }

        @Override
        public void serviceSearchCompleted(int arg0, int arg1) {
            synchronized (lock) {
                lock.notify();
            }
        }

        @Override
        public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {
            for (int i = 0; i < servRecord.length; i++) {
                String url = servRecord[i].getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
                if (url == null) {
                    continue;
                }
                DataElement serviceName = servRecord[i].getAttributeValue(0x0100);
                if (serviceName != null) {
                    System.out.println("service " + serviceName.getValue() + " found " + url);

                    if(serviceName.getValue().equals("OBEX Object Push")){
                        sendMessageToDevice(url);                
                    }
                } else {
                    System.out.println("service found " + url);
                }


            }
        }

        private static void sendMessageToDevice(String serverURL){
            try{
                System.out.println("Connecting to " + serverURL);

                ClientSession clientSession = (ClientSession) Connector.open(serverURL);
                HeaderSet hsConnectReply = clientSession.connect(null);
                if (hsConnectReply.getResponseCode() != ResponseCodes.OBEX_HTTP_OK) {
                    System.out.println("Failed to connect");
                    return;
                }

                HeaderSet hsOperation = clientSession.createHeaderSet();
                hsOperation.setHeader(HeaderSet.NAME, "Hello.txt");
                hsOperation.setHeader(HeaderSet.TYPE, "text");

                //Create PUT Operation
                Operation putOperation = clientSession.put(hsOperation);

                // Send some text to server
                byte data[] = "Hello World !!!".getBytes("iso-8859-1");
                OutputStream os =  (putOperation).openOutputStream();
                os.write(data);
                os.close();

                putOperation.close();

                clientSession.disconnect(null);

                clientSession.close();
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }




    }

回答1:


I found it finally
This is link of my github repository https://github.com/kgarg1995/bluetoothtesting MyDiscoveryListener.java performs all the action



来源:https://stackoverflow.com/questions/23259693/connecting-pc-to-android-phone-using-bluetooth

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!