Подтвердить что ты не робот

Получите силу сигнала 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 в моем файле манифеста.

4b9b3361

Ответ 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(). (Что объект обратного вызова, который обрабатывает соединение, обнаружение, чтение признаков и т.д.)

Вещательный приемник больше не требуется.