Ottenere bluetooth potenza del segnale

Voglio ottenere il segnale Bluetooth forza di un altro dispositivo che collegato al mio telefono,

Come posso ottenere il segnale Bluetooth forza?

Ho provato a cercare un sacco su google e non ho trovato nessuna risposta.

Qualcuno sa come posso realizzarla?

questo è 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();
            }
        }
    };

}

Mi ha anche Bluetooth autorizzazione nel mio file manifest.

  • stackoverflow.com/questions/3020407/…
  • l’avevo già visto, tuttavia, non vi è alcun esempio di come trovare la potenza del segnale..forse mi potete aiutare?
  • Penso che il tuo codice è Ok. Per vedere il Brindisi è necessario eseguire una Scoperta prima.
InformationsquelleAutor Idan Rahamim | 2013-03-09



4 Replies
  1. 33

    Per ottenere il segnale di controllo bluetooth RSSI, si può leggere RSSI per i dispositivi collegati, o eseguire una ricerca bluetooth per controllare l’RSSI per qualsiasi dispositivi nelle vicinanze.

    Fondamentalmente una ricerca bluetooth è una trasmissione di tutte le stazioni di una gamma di rispondere indietro. Come ogni dispositivi respons indietro, Android spara un ACTION_FOUND intento. All’interno di questo intento si può getExtra EXTRA_RSSI per ottenere l’RSSI.

    Notare che non tutto l’hardware bluetooth supporta RSSI.

    Anche Correlati: Android IRC Ore di Ufficio Domanda Su Android Bluetooth RSSI
    qui è un esempio

    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();
            }
        }
    };
    • mi puoi dare un esempio, come posso reed l’RSSI e ottenere da esso il bluetooth forza?
    • grazie mille, ho scritto questo codice, però quando ho accoppiato con il dispositivo non mi mostra in Toast, in forza del segnale, avete un altro modo? aggiungo anche la mia attività al thread principale
    • EXTRA_RSSI valore è di tipo breve, invece di int cambiare e quindi controllare
    • Non dimenticare di accettare la sua risposta, se sei felice con esso(L’icona verde a sinistra della risposta)
    • accetterò, la sua ancora non funziona per me… @Arvind, il EXTRA_RSSI valore è breve e non int nel mio codice, ho anche aggiornato il mio codice(nel thread principale) però ancora non funziona
    • Io dico di cambiarlo a breve a int .Prendere in considerazione che i valori rssi sono di solito negativo (potrebbe essere dBm )
    • ho cambiato int anziché a breve, comunque quando ho accoppiato con un altro dispositivo non mostra Brindisi..hai un altro suggerimento?grazie mille
    • Si dimentica di cambiare numero Intero.MIN_VALUE
    • l’ho cambiato, ancora mi mostra niente…forse qualcosa di sbagliato con il mio codice di cui sopra?
    • Penso che il tuo codice è Ok. Per vedere il Brindisi è necessario eseguire una Scoperta prima.

  2. 24

    Penso che il tuo codice è ok, ma è necessario implementare startDiscovery() per vedere i risultati.

    Il vero è che BluetoothDevice.EXTRA_RSSI funziona solo per il rilevamento di dispositivi, quando ci si connette a uno di loro non sono più in grado di ottenere la sua RSSI.

    Qui ho sviluppato un semplice esempio di un’Attività che permettono di vedere l’RSSI dei dispositivi vicino a voi. È innanzitutto necessario aggiungere una TextView e un Pulsante per il layout, quindi attivare l’Adattatore Bluetooth e poi basta fare clic sul pulsante.

    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");
                }
            }
        };
    }

    Sembra in questo modo:

    Ottenere bluetooth potenza del segnale

    • È possibile controllare questo domanda per favore?
  3. 7

    Le necessarie API è stato introdotto in API 18 (Android 4.3). È necessario chiamare BluetoothGatt#readRemoteRssi() per avviare la richiesta. La risposta si presenta sul BluetoothCallback#onReadRemoteRssi() richiamata. (Che è l’oggetto di callback che gestisce la connessione, la scoperta, la caratteristica legge, etc.)

    Il broadcast receiver roba non è più necessario.

    • Come posso utilizzare questo con Bluetooth Classica presa di connessione .
  4. 1

    Si può ottenere il segnale di forza di un BluetoothDevice utilizzando il suo rssi. Questo può essere fatto utilizzando BluetoothAdapter per ottenere il delimitata dispositivi.

    Una volta che hai quello che ti interessa, basta chiamare connectGatt() su di esso e definire un nuovo BluetoothGattCallback. Questa è un’interfaccia che fornisce qualche metodo per ignorare. I due scritti di seguito vi permetterà di avere l’rssi ogni volta che la connessione cambiamenti di stato.

    @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<BluetoothDevice> 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));
          }
        });
      }
    
    }

    NOTA : in Questo esempio richiede le seguenti autorizzazioni dichiarata nel file manifesto

    <uses-permission android:name="android.permission.BLUETOOTH" />

Lascia un commento