Получите силу сигнала 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 в моем файле манифеста.
Ответы
Ответ 1
Чтобы получить сигнал, вы можете проверить bluetooth RSSI, вы можете прочитать RSSI для подключенных устройств или выполнить обнаружение Bluetooth для проверки RSSI для любых ближайших устройств.
В основном обнаружение Bluetooth - это передача всем станциям в пределах диапазона для ответа. Когда все устройства возвращаются, Android уклоняется от намерения ACTION_FOUND. В рамках этого намерения вы можете получитьExtra EXTRA_RSSI для получения RSSI.
Обратите внимание, что не все Bluetooth-оборудование поддерживает RSSI.
Также по теме: Вопрос о времени работы IRC в Android на 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();
}
}
};
Ответ 2
Я думаю, что ваш код в порядке, но вам нужно реализовать 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 Detection - Android Example]()
Ответ 3
Необходимый API был введен в API 18 (Android 4.3). Чтобы инициировать запрос, вам необходимо вызвать BluetoothGatt#readRemoteRssi()
. Ответ появляется на обратном вызове BluetoothCallback#onReadRemoteRssi()
. (Что объект обратного вызова, который обрабатывает соединение, обнаружение, чтение признаков и т.д.)
Вещательный приемник больше не требуется.