Connect to bluetooth address

How to Connect To Bluetooth Devices Using MAC Address

Okay so this is my first experience working with Java or Android development in general, and I need to create an application that will allow me to connect to external bluetooth devices, such as a bluetooth headset, by entering the devices MAC address by prompting for it to be entered via the keyboard. I understand that the BluetoothAdapter API has most of the functionality I am looking for but I am getting overwhelmed and having trouble integrating its features. I need to pair these devices without entering a pin code, so I was instructed to utilize ‘ListenUsingInsecureRfcommWithServiceRecord’ but I am really unsure of how to implement this, and how BluetoothAdapter, BluetoothSocket, BluetoothServerSocket, and BluetoothDevice all tie in together here. I’ve found plenty of examples of people connected to previously paired devices automatically using getBondedDevices to get their MAC addresses, but none where the user enters the MAC address of the device they would like to connect to. Anyway, here is my code below for my app thus far. It will turn bluetooth on if it is off and make the phone discoverable for 120 seconds. It will also say what devices it discovered in range, but I want to remove this in favor of just prompting for the MAC address if the device you want to connect to. To give some context as to what this app will be used for: there is a service running on the phone that takes input from the built in barcode scanner and puts it into text fields in the forefront activity. So the users of these phones will have a whole bunch of bluetooth headsets available to connect to, and I would like them to open this app, turn on the phones bluetooth, scan the MAC address of the headset they want to connect to thats on a barcode either on the bluetooth headset or its charging cradle, and be able to disconnect from it later. I followed a tutorial and my code below has some functionality now that I would like to change or remove: no listing previous paired devices, no pairing to the last paired device, etc. Only pairing through manually entered (or a scanned barcode) of the MAC address. Any help would be appreciated, I am completely lost at how to do this. Can pay via paypal for some assistance if someone could just work with me long enough to figure this out. I am so close as it is I feel.

package com.android.settings.bluetoothheadset; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothSocket; import android.content.SharedPreferences; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import java.io.IOException; import java.util.Set; import java.util.UUID; import android.bluetooth.BluetoothHeadset; import android.bluetooth.BluetoothServerSocket; public class MainActivity extends ActionBarActivity < protected static final int DISCOVERY_REQUEST = 1; private BluetoothAdapter btAdapter; public TextView statusUpdate; public Button connect; public Button disconnect; public ImageView logo; public String toastText = ""; private BluetoothDevice remoteDevice; BroadcastReceiver bluetoothState = new BroadcastReceiver() < @Override public void onReceive(Context context, Intent intent) < String prevStateExtra = BluetoothAdapter.EXTRA_PREVIOUS_STATE; String stateExtra = BluetoothAdapter.EXTRA_STATE; int state = intent.getIntExtra(stateExtra, -1); int previousState = intent.getIntExtra(prevStateExtra, -1); //String toastText = ""; switch (state) < case (BluetoothAdapter.STATE_TURNING_ON): < toastText = "Bluetooth turning on"; Toast.makeText(MainActivity.this, toastText, Toast.LENGTH_SHORT).show(); break; >case (BluetoothAdapter.STATE_ON): < toastText = "Bluetooth on"; Toast.makeText(MainActivity.this, toastText, Toast.LENGTH_SHORT).show(); setupUI(); break; >case (BluetoothAdapter.STATE_TURNING_OFF): < toastText = "Bluetooth turning off"; Toast.makeText(MainActivity.this, toastText, Toast.LENGTH_SHORT).show(); break; >case (BluetoothAdapter.STATE_OFF): < toastText = "Bluetooth is off"; Toast.makeText(MainActivity.this, toastText, Toast.LENGTH_SHORT).show(); setupUI(); break; >> > >; @Override public void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setupUI(); >private void setupUI() < final TextView statusUpdate = (TextView) findViewById(R.id.result); final Button connect = (Button) findViewById(R.id.connectBtn); final Button disconnect = (Button) findViewById(R.id.disconnectBtn); final ImageView logo = (ImageView) findViewById(R.id.logo); disconnect.setVisibility(View.GONE); logo.setVisibility(View.GONE); btAdapter = BluetoothAdapter.getDefaultAdapter(); if (btAdapter.isEnabled()) < String address = btAdapter.getAddress(); String name = btAdapter.getName(); String statusText = name + " : " + address; statusUpdate.setText(statusText); disconnect.setVisibility(View.VISIBLE); logo.setVisibility(View.VISIBLE); connect.setVisibility(View.GONE); >else < connect.setVisibility(View.VISIBLE); statusUpdate.setText("Bluetooth is not on"); >connect.setOnClickListener(new OnClickListener() < @Override public void onClick(View v) < //String actionStateChanged = BluetoothAdapter.ACTION_STATE_CHANGED; //String actionRequestEnable = BluetoothAdapter.ACTION_REQUEST_ENABLE; //IntentFilter filter = new IntentFilter(actionStateChanged); //registerReceiver(bluetoothState, filter); //startActivityForResult(new Intent(actionRequestEnable), 0); String scanModeChanged = BluetoothAdapter.ACTION_SCAN_MODE_CHANGED; String beDiscoverable = BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE; IntentFilter filter = new IntentFilter(scanModeChanged); registerReceiver(bluetoothState, filter); startActivityForResult(new Intent(beDiscoverable), DISCOVERY_REQUEST); >>); disconnect.setOnClickListener(new OnClickListener() < @Override public void onClick(View v) < btAdapter.disable(); disconnect.setVisibility(View.GONE); logo.setVisibility(View.GONE); connect.setVisibility(View.VISIBLE); statusUpdate.setText("Bluetooth Off"); >>); > @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) < if (requestCode == DISCOVERY_REQUEST) < Toast.makeText(MainActivity.this, "Discovery enabled.", Toast.LENGTH_SHORT).show(); setupUI(); findDevices(); >> private void findDevices() < String lastUsedRemoteDevice = getLastUsedRemoteBTDevice(); if (lastUsedRemoteDevice != null) < toastText = "Checking for known paired devices, namely: " + lastUsedRemoteDevice; Toast.makeText(MainActivity.this, toastText, Toast.LENGTH_SHORT).show(); SetpairedDevices = btAdapter.getBondedDevices(); for (BluetoothDevice pairedDevice : pairedDevices) < if (pairedDevice.getAddress().equals(lastUsedRemoteDevice)) < toastText = "Found Device: " + pairedDevice.getName() + "@" + lastUsedRemoteDevice; Toast.makeText(MainActivity.this, toastText, Toast.LENGTH_SHORT).show(); remoteDevice = pairedDevice; >> > if (remoteDevice == null) < toastText = "Starting discovery for remote devices. "; Toast.makeText(MainActivity.this, toastText, Toast.LENGTH_SHORT).show(); if (btAdapter.startDiscovery()) < toastText = "Discovery thread started. Scanning for Devices"; Toast.makeText(MainActivity.this, toastText, Toast.LENGTH_SHORT).show(); registerReceiver(discoveryResult, new IntentFilter(BluetoothDevice.ACTION_FOUND)); >> > BroadcastReceiver discoveryResult = new BroadcastReceiver() < @Override public void onReceive(Context context, Intent intent) < String remoteDeviceName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME); BluetoothDevice remoteDevice; remoteDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); toastText = "Discovered: " + remoteDeviceName; Toast.makeText(MainActivity.this, toastText, Toast.LENGTH_SHORT).show(); //statusUpdate.setText(statusText); >>; private String getLastUsedRemoteBTDevice() < SharedPreferences prefs = getPreferences(MODE_PRIVATE); String result = prefs.getString("LAST_REMOTE_DEVICE_ADDRESS", null); return result; >> 

0

Источник

Читайте также:  Bluetooth для опель инсигния

Что такое адрес Bluetooth в Android и как его узнать

В наше время каждый знает, что такое Bluetooth. Более того, практически каждый умеет им пользоваться. Но мало кто углублялся в эту тему и пытался понять, как работает беспроводная связь. В этой статье мы разберем, что такое Bluetooth адрес в Android-устройствах, зачем он нужен и где его найти.

Что такое адрес сетевого адаптера

Сразу же стоит отметить, что Bluetooth – это такой же сетевой адаптер, как и Wi-Fi модуль или сетевая карта. Принцип построения связи во всех этих технологиях схож, отличия заключаются только в стандартах связи, скорости передачи данных и радиусе покрытия (касается только беспроводных адаптеров).

Итак, как и любой другой сетевой модуль, Bluetooth также имеет свой локальный MAC-address, например, C5:87:BR:7W:H3:40.

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

Например, когда вы отправляете письмо, вы указываете адрес проживания получателя (или в случае с электронной почтой вы указываете электронный адрес). Такой же принцип работает и с Bluetooth связью. То есть, по MAC-address Bluetooth определяется девайс, благодаря чему появляется возможность выполнить сопряжение.

Как правило, пользователям даже не нужно знать эти данные, так как гаджеты в подавляющем большинстве случаев автоматически определяют все нужные сведения. При сопряжении устройств вы видите только имя того или иного телефона (планшета или ноутбука), но под именем скрыты те самые MAC-addresses.

Читайте также:  Bluetooth наушники микрофон нет

Другими словами, например, сопрягаясь для передачи файлов, гаджеты взаимодействуют именно по своим уникальным MAC-address. Как уже говорилось, пользователю необязательно их знать, но иногда это просто необходимо. Вот мы и подошли к вопросу, как узнать Bluetooth адрес в Android

Информация о сетевом модуле

Найти всю необходимую информацию о тех или иных модулях в телефоне или планшете на Android достаточно легко. При этом вам не придется искать и устанавливать никаких дополнительных приложений. Войдите в меню вашего смартфона (или планшета). Найдите ярлык «Настройки», как правило, он сделан в виде шестеренки.

Открываем настройки. Далее на более старых версиях Android следует перелистать страницу в самый низ. В самом конце вы увидите пункт «Об устройстве».

На новых версиях Android вам нужно перейти во вкладку «Опции» и опустить меню в самый низ. Здесь также будет пункт «Об устройстве».

Открываем его. Далее перейдите в категорию «Состояние». Осталось только найти строку «Bluetooth». Под ней вы увидите MAC-address.

Стоит помнить, что Bluetooth при этом должен быть включен. В противном случае в указанной строке будет отображаться надпись «Недоступно».

Как видите, все очень легко и просто. Но, как узнать MAC не своего, например, смартфона, а девайса, к которому нужно подключиться? Здесь также нет ничего сложного, но нужно предварительно подготовиться.

Подключаемся к интернету, открываем Play Market и в поисковой строке пишем название приложения – Bluetooth Address Finder. Выберите из результатов одноименное приложение и установите его. Далее открываем программу и нажимаем кнопку «Begin searching procedure». Ниже появится список MAC-address всех доступных вам на текущий момент девайсов, на которых включен Bluetooth.

Что такое адрес Bluetooth в Android и как его узнать: Видео

Источник

Connect to a bluetooth device using stored MAC address through service

I am new to Android and I am trying to understand the working of Bluetooth connection. For that I have used used the wiced sense app to understand the working. Here I want to connect to a particular device with respect to their MAC address. I have managed to store and retrieve the MAC address through Shared preferences. And now I want to connect to device which matches the MAC address without user interaction. To store the MAC address I do the following:

 public View getView(int position, View convertView, ViewGroup parent) < ViewHolder holder; if (convertView == null || convertView.findViewById(R.id.device_name) == null) < convertView = mInflater.inflate(R.layout.devicepicker_listitem, null); holder = new ViewHolder(); String DeviceName; holder.device_name = (TextView) convertView.findViewById(R.id.device_name); // DeviceName= String.valueOf((TextView) convertView.findViewById(R.id.device_name)); holder.device_addr = (TextView) convertView.findViewById(R.id.device_addr); holder.device_rssi = (ProgressBar) convertView.findViewById(R.id.device_rssi); convertView.setTag(holder); >else < holder = (ViewHolder) convertView.getTag(); >DeviceRecord rec = mDevices.get(position); holder.device_rssi.setProgress(normaliseRssi(rec.rssi)); editor = PreferenceManager.getDefaultSharedPreferences(mContext); String deviceName = rec.device.getName(); if (deviceName != null && deviceName.length() > 0) < holder.device_name.setText(rec.device.getName()); holder.device_addr.setText(rec.device.getAddress()); //Log.i(TAG, "Service onStartCommand"); if(deviceName.equals("eVulate")&& !editor.contains("MAC_ID")) < storeMacAddr(String.valueOf(rec.device.getAddress())); >> else < holder.device_name.setText(rec.device.getAddress()); holder.device_addr.setText(mContext.getResources().getString(R.string.unknown_device)); >return convertView; public void storeMacAddr(String MacAddr) < editor.edit().putString("MAC_ID", MacAddr).commit(); >> 
private void initDevicePicker() < final SharedPreferences mSharedPreference= PreferenceManager.getDefaultSharedPreferences(getBaseContext()); if(mSharedPreference.contains("MAC_ID"))< String value=(mSharedPreference.getString("MAC_ID", "")); >else // search for devices > 

I want to start a service after retrieving the MAC address and I don’t know where exactly to do that. Any kind of help is appreciated.

Читайте также:  Jabra speak 510 uc bluetooth usb

I saw one of the answer which suits to my situation here . If anyone can provide me some more details especially with MyApplication and Abstract class it would be really helpful.

2 Answers 2

All you have the MAC addresses of some bluetooth devices and you want to connect to them using their MAC addresses. I think you need to read more about bluetooth discovery and connection but anyway, I’m putting some code which might help you later after reading about Android bluetooth.

From your Activity you need to register a BroadcastReceiver so identify the bluetooth connection changes and to start discovering nearby bluetooth devices. The BroadcastReceiver will look like this

private final BroadcastReceiver mReceiver = new BroadcastReceiver() < public void onReceive(Context context, Intent intent) < String action = intent.getAction(); if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) < >else if (BluetoothDevice.ACTION_FOUND.equals(action)) < BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); if (device.getAddress().equals(Constants.DEVICE_MAC_ADDRESS)) < startCommunication(device); >> else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) < >else if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) < // Your bluetooth device is connected to the Android bluetooth >else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) < // Your device is disconnected. Try connecting again via startDiscovery mBluetoothAdapter.startDiscovery(); >> >; 

There’s a startCommunication function inside I’ll post it later in this answer. Now you need to register this BroadcastReceiver in your activity.

Inside your onCreate register the receiver like this

// Register bluetooth receiver IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); filter.addAction(BluetoothDevice.ACTION_FOUND); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(mReceiver, filter); 

Don’t forget to unregister the receiver inside onDestroy function of your Activity

unregisterReceiver(mReceiver); 

Now in your Activity you need to declare a BluetoothAdapter to start bluetooth discovery and a BluetoothSocket to make connection with the bluetooth. So you need to add these two variables in your Activity and initialize them accordingly.

// Declaration public static BluetoothSocket mmSocket; public static BluetoothAdapter mBluetoothAdapter; 
// Inside `onCreate` initialize the bluetooth adapter and start discovering nearby BT devices mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mBluetoothAdapter.enable(); mBluetoothAdapter.startDiscovery(); 

Now here you go for the startCommunication function

void startCommunication(BluetoothDevice device) < if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) < ConnectThread mConnectThread = new ConnectThread(device); mConnectThread.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); >else < ConnectThread mConnectThread = new ConnectThread(device); mConnectThread.execute((Void) null); >> 

The ConnectThread is an AsyncTask which connects to a desired device in a different thread and opens a BluetoothSocket for communication.

public class ConnectThread extends AsyncTask  < private BluetoothDevice btDevice; public ConnectThread(BluetoothDevice device) < this.btDevice = device; >@Override protected String doInBackground(Void. params) < try < YourActivity.mmSocket = btDevice.createRfcommSocketToServiceRecord(Constants.MY_UUID); YourActivity.mBluetoothAdapter.cancelDiscovery(); YourActivity.mmSocket.connect(); >catch (Exception e) < e.printStackTrace(); return null; >return ""; > @Override protected void onPostExecute(final String result) < if (result != null)else > @Override protected void onCancelled() <> > 

This is how you can find the nearby bluetooth device and connect to them by using the MAC addresses stored previously.

Источник

Оцените статью
Adblock
detector