powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / Bluetooth Connection
2 сообщений из 2, страница 1 из 1
Bluetooth Connection
    #38888096
BoJI4er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу сообразить как создать соединение через Bluethooth без сопряжения и передать 1 байт?

По примерам смог собрать клиент-сервер приложение, но для передачи байт нужно что бы устройства были сопряжены и оба находились в состоянии видимости... :\

Меня этот вариант не устраивает :-(

Мне нужно подключится к серверу не выполняя на сервере никаких операций.

С сервером у меня нет никаких вопросов. Я запускаю поток на "ожидание соединения" и он висит корректно и в случае подключение передает 2а байта

сервер
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
	
private final String MY_UUID = "550e8400-e29b-41d4-a716-446655440000";

private class AcceptThread extends Thread {
	    private final BluetoothServerSocket mmServerSocket;
	 
	    public AcceptThread() {
	        // используем вспомогательную переменную, которую в дальнейшем
	        // свяжем с mmServerSocket,
	        BluetoothServerSocket tmp = null;
	        try {
	            // MY_UUID это UUID нашего приложения, это же значение 
	            // используется в клиентском приложении
	            tmp =  BluetoothAdapter.getDefaultAdapter().listenUsingRfcommWithServiceRecord("Server", UUID.fromString(MY_UUID));
	        } catch (IOException e) { }
	        mmServerSocket = tmp;
	    }
	 
	    public void run() {
	        BluetoothSocket socket = null;
	        // ждем пока не произойдет ошибка или не
	        // будет возвращен сокет
	        while (true) {
	            try {
	            	Log.d(LOG, "wait... ");
	                socket = mmServerSocket.accept();
	                Log.d(LOG, "found!");
	            } catch (IOException e) {
	                break;
	            }
	            // если соединение было подтверждено
	            if (socket != null) {
	                // управлчем соединением (в отдельном потоке)
	            	try
	            	{
	            		Log.d(LOG, "start write");
	            		byte[] k = new byte[2];
	            		k[0] = 5;
	            		k[1] = 65;
		            	socket.getOutputStream().write(k,0,2);
		            	socket.getOutputStream().flush();
		            	Log.d(LOG, "write!");
		            	mmServerSocket.close();
		            	Log.d(LOG, "exit");
	            	}
	            	catch(Exception e)
	            	{
	            		Log.e(LOG, "Error write: ",e);
	            	}
	            	//manageConnectedSocket(socket);
	                break;
	            }
	        }
	    }
	 
	    //  отмена ожидания сокета 
	    public void cancel() {
	        try {
	            mmServerSocket.close();
	        } catch (IOException e) { }
	    }
	}


А с клиентом проблема - Он не видит сервер... С помощью "шаманского бубна" я делал соединение и передавал данные, но к сожалению на "оригинальном сервере" нет UI для использования такого метода. То есть нажать кнопку "разрешить сопряжение" и "сделать устройство видимым" я не могу
клиент
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
[/SRC]
private final String MY_UUID = "550e8400-e29b-41d4-a716-446655440000";

BluetoothAdapter bluetooth;
	BroadcastReceiver mReceiver;
...
bluetooth = BluetoothAdapter.getDefaultAdapter();
			if (bluetooth!=null)
			{
				Log.d(LOG, "good");
				if (bluetooth.isEnabled()) {
				    // Bluetooth включен. Работаем.
					//Log.d(LOG, "connected");
					GetList();
				}
				else
				{
				    // Bluetooth выключен. Предложим пользователю включить его.
				    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
				    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
				    Log.d(LOG, "connecting");
				    if (bluetooth.isEnabled()) {
				    	GetList();
				    }

				}
				
			}
			else
			{
				Log.d(LOG, "error");
			}
...

private void GetList()
	{
		Log.d(LOG, "connect");
        String mydeviceaddress = bluetooth.getAddress();
        String mydevicename = bluetooth.getName();
        Log.d(LOG, mydevicename + " : " + mydeviceaddress);

     Log.d(LOG, "create receiver");
     // Создаем BroadcastReceiver для ACTION_FOUND
         mReceiver = new BroadcastReceiver() {
        	//<<---------- При вызове системой данного метода он не видит мой сервер, так как устройства не сопряжены 
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                // Когда найдено новое устройство

                if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                    // Получаем объект BluetoothDevice из интента
                    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                    
                    new ConnectThread(device).start();  
                    //Добавляем имя и адрес в array adapter, чтобы показвать в ListView
                    BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
                    Log.w(LOG,device.getName()+"  "+device.getAddress());
 
                }
            }
        };
        
        Log.d(LOG, "register receiver");
        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        registerReceiver(mReceiver, filter); // Не забудьте снять регистрацию в onDestroy
        Log.d(LOG, "Start scan");
        BluetoothAdapter.getDefaultAdapter().startDiscovery();
        Log.d(LOG, "finish receiver");
        
      
	} 
...

private class ConnectThread extends Thread {
	    private final BluetoothSocket mmSocket;
	    private final BluetoothDevice mmDevice;
	 
	    public ConnectThread(BluetoothDevice device) {
	        // используем вспомогательную переменную, которую в дальнейшем
	        // свяжем с mmSocket, 
	    	Log.d(LOG, "create new connection");
	        BluetoothSocket tmp = null;
	        mmDevice = device;
	 
	        // получаем BluetoothSocket чтобы соединиться с BluetoothDevice
	        try {
	            // MY_UUID это UUID, который используется и в сервере
	            tmp = device.createRfcommSocketToServiceRecord(UUID.fromString(MY_UUID));
	        } catch (IOException e) { }
	        mmSocket = tmp;
	    }
	 
	    public void run() {
	        // Отменяем сканирование, поскольку оно тормозит соединение
	       // mBluetoothAdapter.cancelDiscovery();
	 
	        try {
	            // Соединяемся с устройством через сокет. 
	            // Метод блокирует выполнение программы до
	            // установки соединения или возникновения ошибки
	        	Log.d(LOG, "start connection: ");
	            mmSocket.connect(); 
	     
	            Log.d(LOG, "start read: ");
	            byte[] buf = new byte[2];
	            mmSocket.getInputStream().read(buf);
	            Log.d(LOG, Arrays.toString(buf));
	            mmSocket.close(); 

	        } catch (IOException e) {
	            // Невозможно соединиться. Закрываем сокет и выходим.
	        	Log.e(LOG,"error read",e);
	            return;
	        }
	 
	    }
	 
	    /**  отмена ожидания сокета */
	    public void cancel() {
	        try {
	            mmSocket.close();
	        } catch (IOException e) { }
	    }
	}
		


...
Рейтинг: 0 / 0
Bluetooth Connection
    #38888522
BoJI4er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BoJI4er,

Server (Andoid 4.2.2) - Нужно обойти вопрос согласования, или автоматически принимать все подключения
Client (Android 4.0.4) - Вопрос согласования можно оставить
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Android [игнор отключен] [закрыт для гостей] / Bluetooth Connection
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]