Bluetooth android studio java

Android – Bluetooth

Bluetooth является способом отправки или получения данных между двумя разными устройствами. Платформа Android включает поддержку структуры Bluetooth, которая позволяет устройству обмениваться данными по беспроводной связи с другими устройствами Bluetooth.

Android предоставляет Bluetooth API для выполнения этих различных операций.

  • Сканирование для других устройств Bluetooth
  • Получить список сопряженных устройств
  • Подключение к другим устройствам через обнаружение услуг

Сканирование для других устройств Bluetooth

Получить список сопряженных устройств

Подключение к другим устройствам через обнаружение услуг

Android предоставляет класс BluetoothAdapter для связи с Bluetooth. Создайте объект этого вызова, вызвав статический метод getDefaultAdapter (). Его синтаксис приведен ниже.

private BluetoothAdapter BA; BA = BluetoothAdapter.getDefaultAdapter();

Чтобы включить Bluetooth вашего устройства, вызовите намерение со следующей константой Bluetooth ACTION_REQUEST_ENABLE. Его синтаксис есть.

Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(turnOn, 0); 

Помимо этой константы есть и другие константы, предоставляемые API, которые поддерживают различные задачи. Они перечислены ниже.

ACTION_REQUEST_DISCOVERABLE

Эта константа используется для включения Bluetooth

Эта константа будет уведомлять, что состояние Bluetooth было изменено

Эта константа используется для получения информации о каждом обнаруженном устройстве

ACTION_REQUEST_DISCOVERABLE

Эта константа используется для включения Bluetooth

Эта константа будет уведомлять, что состояние Bluetooth было изменено

Эта константа используется для получения информации о каждом обнаруженном устройстве

После включения Bluetooth вы можете получить список сопряженных устройств, вызвав метод getBondedDevices (). Возвращает набор устройств Bluetooth. Его синтаксис есть.

private SetBluetoothDevice>pairedDevices; pairedDevices = BA.getBondedDevices();

Помимо перехваченных устройств, в API есть и другие методы, которые дают больше контроля над Blueetooth. Они перечислены ниже.

Этот метод включает адаптер, если не включен

Этот метод возвращает true, если адаптер включен

Этот метод отключает адаптер

Этот метод возвращает имя адаптера Bluetooth

Этот метод изменяет имя Bluetooth

Этот метод возвращает текущее состояние адаптера Bluetooth.

Этот метод запускает процесс обнаружения Bluetooth на 120 секунд.

Этот метод включает адаптер, если не включен

Этот метод возвращает true, если адаптер включен

Этот метод отключает адаптер

Этот метод возвращает имя адаптера Bluetooth

Этот метод изменяет имя Bluetooth

Этот метод возвращает текущее состояние адаптера Bluetooth.

Этот метод запускает процесс обнаружения Bluetooth на 120 секунд.

пример

В этом примере демонстрируется класс BluetoothAdapter для управления Bluetooth и отображения списка сопряженных устройств с помощью Bluetooth.

Чтобы поэкспериментировать с этим примером, вам нужно запустить его на реальном устройстве.

меры Описание
1 Вы будете использовать Android studio для создания приложения Android пакета com.example.sairamkrishna.myapplication.
2 Измените файл src / MainActivity.java, чтобы добавить код
3 Измените XML-файл макета. Res / layout / activity_main.xml добавьте любой компонент GUI, если это необходимо.
4 Измените AndroidManifest.xml, чтобы добавить необходимые разрешения.
5 Запустите приложение и выберите работающее устройство Android, установите на него приложение и проверьте результаты.

Вот содержание src / MainActivity.java

package com.example.sairamkrishna.myapplication; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; import java.util.ArrayList; import java.util.Set; public class MainActivity extends Activity  Button b1,b2,b3,b4; private BluetoothAdapter BA; private SetBluetoothDevice>pairedDevices; ListView lv; @Override protected void onCreate(Bundle savedInstanceState)  super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1 = (Button) findViewById(R.id.button); b2=(Button)findViewById(R.id.button2); b3=(Button)findViewById(R.id.button3); b4=(Button)findViewById(R.id.button4); BA = BluetoothAdapter.getDefaultAdapter(); lv = (ListView)findViewById(R.id.listView); > public void on(View v) if (!BA.isEnabled())  Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(turnOn, 0); Toast.makeText(getApplicationContext(), "Turned on",Toast.LENGTH_LONG).show(); > else  Toast.makeText(getApplicationContext(), "Already on", Toast.LENGTH_LONG).show(); > > public void off(View v) BA.disable(); Toast.makeText(getApplicationContext(), "Turned off" ,Toast.LENGTH_LONG).show(); > public void visible(View v) Intent getVisible = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); startActivityForResult(getVisible, 0); > public void list(View v) pairedDevices = BA.getBondedDevices(); ArrayList list = new ArrayList(); for(BluetoothDevice bt : pairedDevices) list.add(bt.getName()); Toast.makeText(getApplicationContext(), "Showing Paired Devices",Toast.LENGTH_SHORT).show(); final ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, list); lv.setAdapter(adapter); > >

Вот содержание activity_main.xml

Здесь abc указывает на логотип учебного пункта.

xml version="1.0" encoding="utf-8"?>  xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:transitionGroup="true">  android:text="Bluetooth Example" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview" android:textSize="35dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tutorials point" android:id="@+id/textView" android:layout_below="@+id/textview" android:layout_centerHorizontal="true" android:textColor="#ff7aff24" android:textSize="35dp" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:src="@drawable/abc" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" android:theme="@style/Base.TextAppearance.AppCompat" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Turn On" android:id="@+id/button" android:layout_below="@+id/imageView" android:layout_toStartOf="@+id/imageView" android:layout_toLeftOf="@+id/imageView" android:clickable="true" android:onClick="on" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Get visible" android:onClick="visible" android:id="@+id/button2" android:layout_alignBottom="@+id/button" android:layout_centerHorizontal="true" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="List devices" android:onClick="list" android:id="@+id/button3" android:layout_below="@+id/imageView" android:layout_toRightOf="@+id/imageView" android:layout_toEndOf="@+id/imageView" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="turn off" android:onClick="off" android:id="@+id/button4" android:layout_below="@+id/button" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/listView" android:layout_alignParentBottom="true" android:layout_alignLeft="@+id/button" android:layout_alignStart="@+id/button" android:layout_below="@+id/textView2" />  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Paired devices:" android:id="@+id/textView2" android:textColor="#ff34ff06" android:textSize="25dp" android:layout_below="@+id/button4" android:layout_alignLeft="@+id/listView" android:layout_alignStart="@+id/listView" /> 

Вот содержимое Strings.xml

Вот содержание AndroidManifest.xml

Eclipse Run Icon

Давайте попробуем запустить ваше приложение. Я предполагаю, что вы подключили свое фактическое мобильное устройство Android к компьютеру. Чтобы запустить приложение из студии Android, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». значок на панели инструментов. Если ваш Bluetooth не будет включен, он попросит вашего разрешения для включения Bluetooth.

Anroid Bluetooth учебник

Теперь просто нажмите кнопку Get Visible, чтобы включить видимость. Появится следующий экран с вашим разрешением включить обнаружение на 120 секунд.

Anroid Bluetooth учебник

Теперь просто выберите опцию Список устройств. Он отобразит список сопряженных устройств в виде списка. В моем случае у меня только одно сопряженное устройство. Это показано ниже.

Anroid Bluetooth учебник

Теперь просто нажмите кнопку выключения, чтобы отключить Bluetooth. При отключении Bluetooth появится следующее сообщение, указывающее на успешное отключение Bluetooth.

Источник

How to send/receive messages via bluetooth android studio

I am trying to create an app that allows a string to be sent from one Android phone to another. The code for this is provided below. However, it isn’t working as I keep getting exceptions from the try catch piece of code under the pairDevice() section. Does anyone know why I might be getting this?

import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.os.ParcelUuid; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Scanner; import java.util.Set; public class MainActivity extends AppCompatActivity < InputStream inStream; OutputStream outputStream; private static final int REQUEST_ENABLE_BT = 1; public void pairDevice() < BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (bluetoothAdapter != null && !bluetoothAdapter.isEnabled()) < Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);>Set pairedDevices = bluetoothAdapter.getBondedDevices(); if (pairedDevices.size() > 0) < Object[] devices = pairedDevices.toArray(); BluetoothDevice device = (BluetoothDevice) devices[0]; ParcelUuid[] uuid = device.getUuids(); try < BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(uuid[0].getUuid()); socket.connect(); Toast.makeText(this, "Socket connected", Toast.LENGTH_LONG).show(); outputStream = socket.getOutputStream(); inStream = socket.getInputStream(); >catch (IOException e) < Toast.makeText(this, "Exception found", Toast.LENGTH_LONG).show(); >> > public void SendMessage(View v) < EditText outMessage = (EditText) findViewById(R.id.editText); try < if (outputStream != null) outputStream.write(outMessage.toString().getBytes()); TextView displayMessage = (TextView) findViewById(R.id.textView); Scanner s = new Scanner(inStream).useDelimiter("\\A"); displayMessage.setText(s.hasNext() ? s.next() : ""); >catch (IOException e) Toast.makeText(this,"No output stream", Toast.LENGTH_LONG).show(); > @Override protected void onCreate(Bundle savedInstanceState)

3 Answers 3

I have made few changes to your app:-

Firstly, I shifted the code responsible for creating the Bluetooth connection to ConnectThread .

2) Added AcceptThread responsible for listening incoming connections and ConnectedThread maintaining the BTConnection, Sending the data, and receiving incoming data through input/output streams respectively. 3) Created 2 buttons to start ConnectThread and AcceptThread.

NOTE: Make sure both the devices are paired and the device that you are trying to connect to is at the top of the list(or just remove all the paired devices from both the devices and only pair the devices that you want to connect). Also, you must start the AcceptThread before ConnectThread

MAINACTIVITY.JAVA

public class MainActivity extends AppCompatActivity < private static final UUID MY_UUID_INSECURE = UUID.fromString("8ce255c0-200a-11e0-ac64-0800200c9a66"); private static final int REQUEST_ENABLE_BT = 1; BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); private BluetoothDevice mmDevice; private UUID deviceUUID; ConnectedThread mConnectedThread; private Handler handler; String TAG = "MainActivity"; EditText send_data; TextView view_data; StringBuilder messages; public void pairDevice(View v) < SetpairedDevices = bluetoothAdapter.getBondedDevices(); Log.e("MAinActivity", "" + pairedDevices.size() ); if (pairedDevices.size() > 0) < Object[] devices = pairedDevices.toArray(); BluetoothDevice device = (BluetoothDevice) devices[0]; //ParcelUuid[] uuid = device.getUuids(); Log.e("MAinActivity", "" + device ); //Log.e("MAinActivity", "" + uuid) ConnectThread connect = new ConnectThread(device,MY_UUID_INSECURE); connect.start(); >> private class ConnectThread extends Thread < private BluetoothSocket mmSocket; public ConnectThread(BluetoothDevice device, UUID uuid) < Log.d(TAG, "ConnectThread: started."); mmDevice = device; deviceUUID = uuid; >public void run() < BluetoothSocket tmp = null; Log.i(TAG, "RUN mConnectThread "); // Get a BluetoothSocket for a connection with the // given BluetoothDevice try < Log.d(TAG, "ConnectThread: Trying to create InsecureRfcommSocket using UUID: " +MY_UUID_INSECURE ); tmp = mmDevice.createRfcommSocketToServiceRecord(MY_UUID_INSECURE); >catch (IOException e) < Log.e(TAG, "ConnectThread: Could not create InsecureRfcommSocket " + e.getMessage()); >mmSocket = tmp; // Make a connection to the BluetoothSocket try < // This is a blocking call and will only return on a // successful connection or an exception mmSocket.connect(); >catch (IOException e) < // Close the socket try < mmSocket.close(); Log.d(TAG, "run: Closed Socket."); >catch (IOException e1) < Log.e(TAG, "mConnectThread: run: Unable to close connection in socket " + e1.getMessage()); >Log.d(TAG, "run: ConnectThread: Could not connect to UUID: " + MY_UUID_INSECURE ); > //will talk about this in the 3rd video connected(mmSocket); > public void cancel() < try < Log.d(TAG, "cancel: Closing Client Socket."); mmSocket.close(); >catch (IOException e) < Log.e(TAG, "cancel: close() of mmSocket in Connectthread failed. " + e.getMessage()); >> > private void connected(BluetoothSocket mmSocket) < Log.d(TAG, "connected: Starting."); // Start the thread to manage the connection and perform transmissions mConnectedThread = new ConnectedThread(mmSocket); mConnectedThread.start(); >private class ConnectedThread extends Thread < private final BluetoothSocket mmSocket; private final InputStream mmInStream; private final OutputStream mmOutStream; public ConnectedThread(BluetoothSocket socket) < Log.d(TAG, "ConnectedThread: Starting."); mmSocket = socket; InputStream tmpIn = null; OutputStream tmpOut = null; try < tmpIn = mmSocket.getInputStream(); tmpOut = mmSocket.getOutputStream(); >catch (IOException e) < e.printStackTrace(); >mmInStream = tmpIn; mmOutStream = tmpOut; > public void run() < byte[] buffer = new byte[1024]; // buffer store for the stream int bytes; // bytes returned from read() // Keep listening to the InputStream until an exception occurs while (true) < // Read from the InputStream try < bytes = mmInStream.read(buffer); final String incomingMessage = new String(buffer, 0, bytes); Log.d(TAG, "InputStream: " + incomingMessage); runOnUiThread(new Runnable() < @Override public void run() < view_data.setText(incomingMessage); >>); > catch (IOException e) < Log.e(TAG, "write: Error reading Input Stream. " + e.getMessage() ); break; >> > public void write(byte[] bytes) < String text = new String(bytes, Charset.defaultCharset()); Log.d(TAG, "write: Writing to outputstream: " + text); try < mmOutStream.write(bytes); >catch (IOException e) < Log.e(TAG, "write: Error writing to output stream. " + e.getMessage() ); >> /* Call this from the main activity to shutdown the connection */ public void cancel() < try < mmSocket.close(); >catch (IOException e) < >> > public void SendMessage(View v) < byte[] bytes = send_data.getText().toString().getBytes(Charset.defaultCharset()); mConnectedThread.write(bytes); >@Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); send_data =(EditText) findViewById(R.id.editText); view_data = (TextView) findViewById(R.id.textView); if (bluetoothAdapter != null && !bluetoothAdapter.isEnabled()) < Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); >> public void Start_Server(View view) < AcceptThread accept = new AcceptThread(); accept.start(); >private class AcceptThread extends Thread < // The local server socket private final BluetoothServerSocket mmServerSocket; public AcceptThread()< BluetoothServerSocket tmp = null ; // Create a new listening server socket try< tmp = bluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord("appname", MY_UUID_INSECURE); Log.d(TAG, "AcceptThread: Setting up Server using: " + MY_UUID_INSECURE); >catch (IOException e) < Log.e(TAG, "AcceptThread: IOException: " + e.getMessage() ); >mmServerSocket = tmp; > public void run()< Log.d(TAG, "run: AcceptThread Running."); BluetoothSocket socket = null; try< // This is a blocking call and will only return on a // successful connection or an exception Log.d(TAG, "run: RFCOM server socket start. "); socket = mmServerSocket.accept(); Log.d(TAG, "run: RFCOM server socket accepted connection."); >catch (IOException e) < Log.e(TAG, "AcceptThread: IOException: " + e.getMessage() ); >//talk about this is in the 3rd if(socket != null) < connected(socket); >Log.i(TAG, "END mAcceptThread "); > public void cancel() < Log.d(TAG, "cancel: Canceling AcceptThread."); try < mmServerSocket.close(); >catch (IOException e) < Log.e(TAG, "cancel: Close of AcceptThread ServerSocket failed. " + e.getMessage() ); >> > 

ACTIVITY_MAIN.XML

Источник

Читайте также:  Midi keyboard with bluetooth
Оцените статью
Adblock
detector