Получите силу сигнала Bluetooth

Я хочу получить силу сигнала Bluetooth другого устройства, подключенного к моему телефону,

Как я могу получить силу сигнала Bluetooth?

Я пытался много искать по Google и не нашел ответа.

Кто-нибудь знает, как я могу его реализовать?

это myActivity:

public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND)); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private final BroadcastReceiver receiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(BluetoothDevice.ACTION_FOUND.equals(action)) { int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE); Toast.makeText(getApplicationContext()," RSSI: " + rssi + "dBm", Toast.LENGTH_SHORT).show(); } } }; } 

У меня также есть разрешение Bluetooth в моем файле манифеста.

Чтобы получить сигнал, вы можете проверить bluetooth RSSI, вы можете прочитать RSSI для подключенных устройств или выполнить обнаружение Bluetooth для проверки RSSI для любых ближайших устройств.

В основном обнаружение Bluetooth – это передача всем станциям в радиусе действия для ответа. Когда все устройства возвращаются, Android уклоняется от намерения ACTION_FOUND. В рамках этого намерения вы можете получитьExtra EXTRA_RSSI для получения RSSI.

Обратите внимание: не все Bluetooth-оборудование поддерживает RSSI.

Также связанный: Android IRC Office Hours Вопрос об Android Bluetooth RSSI вот пример

 private final BroadcastReceiver receiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(BluetoothDevice.ACTION_FOUND.equals(action)) { int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE); Toast.makeText(getApplicationContext()," RSSI: " + rssi + "dBm", Toast.LENGTH_SHORT).show(); } } }; 

Я думаю, что ваш код в порядке, но вам нужно реализовать startDiscovery() , чтобы увидеть результаты.

Истина в том, что BluetoothDevice.EXTRA_RSSI работает только для обнаружения устройств, когда вы подключаетесь к одному из них, вы больше не можете получать свой RSSI.

Здесь я разработал очень простой пример Activity, который позволяет вам видеть RSSI устройств рядом с вами. Сначала вам нужно добавить TextView и кнопку в свой макет, затем включить Bluetooth-адаптер, а затем просто нажать кнопку.

 package com.in2apps.rssi; import android.os.Bundle; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class RSSIActivity extends Activity { private BluetoothAdapter BTAdapter = BluetoothAdapter.getDefaultAdapter(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rssi); registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND)); Button boton = (Button) findViewById(R.id.button1); boton.setOnClickListener(new OnClickListener(){ public void onClick(View v) { BTAdapter.startDiscovery(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_rssi, menu); return true; } private final BroadcastReceiver receiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(BluetoothDevice.ACTION_FOUND.equals(action)) { int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE); String name = intent.getStringExtra(BluetoothDevice.EXTRA_NAME); TextView rssi_msg = (TextView) findViewById(R.id.textView1); rssi_msg.setText(rssi_msg.getText() + name + " => " + rssi + "dBm\n"); } } }; } 

Это выглядит так:

Обнаружение RSSI - пример Android

Необходимый API был введен в API 18 (Android 4.3). Чтобы инициировать запрос, вам нужно позвонить BluetoothGatt#readRemoteRssi() . Ответ отображается в BluetoothCallback#onReadRemoteRssi() . (Это объект обратного вызова, который обрабатывает соединение, обнаружение, считывание характеристик и т. Д.)

Материал вещательного приемника больше не требуется.

Вы можете получить сигнал от BluetoothDevice, используя его rssi. Это можно сделать с помощью BluetoothAdapter для получения ограниченных устройств.

Если у вас есть тот, который вам интересен, просто вызовите connectGatt () и определите новый BluetoothGattCallback . Это интерфейс, который предоставляет несколько методов для переопределения. Два написанных ниже позволяют вам иметь rssi каждый раз, когда изменяется состояние соединения.

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get the default bluetoothAdapter to store bonded devices into a Set of BluetoothDevice(s) BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // It will work if your bluetooth device is already bounded to your phone // If not, you can use the startDiscovery() method and connect to your device Set bluetoothDeviceSet = bluetoothAdapter.getBondedDevices(); for (BluetoothDevice bluetoothDevice : bluetoothDeviceSet) { bluetoothDevice.connectGatt(this, true, new BluetoothGattCallback() { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { super.onConnectionStateChange(gatt, status, newState); } @Override public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) { if(status == BluetoothGatt.GATT_SUCCESS) Log.d("BluetoothRssi", String.format("BluetoothGat ReadRssi[%d]", rssi)); } }); } } 

ПРИМЕЧАНИЕ. Этот образец требует следующего разрешения, объявленного в вашем файле манифеста

  
  • Сохранять широковещательный приемник после закрытия приложения
  • Android-java- Как отсортировать список объектов по определенному значению внутри объекта
  • Java SE 6 против JRE 1.6 против JDK 1.6 - Что это значит?
  • Android 3.1 USB-хост - BroadcastReceiver не получает USB_DEVICE_ATTACHED
  • java urlconnection получает окончательный перенаправленный URL
  • warning: путь к bootstrap, не установленный вместе с -source 1.5
  • Отправка электронной почты на Android с использованием API JavaMail без использования стандартного / встроенного приложения
  • Создание приложения Android Lock Screen.
  • Задача unmarshalling parcelables
  • remove () в списке, созданном с помощью Arrays.asList () throws UnsupportedOperationException
  • База данных не копирует из активов
  • Давайте будем гением компьютера.