2013-03-09 14 views
27

chcę uzyskać siłę sygnału Bluetooth z innym urządzeniem, które łączy się z moim telefonem,Get siłę sygnału bluetooth

Jak mogę uzyskać siłę sygnału Bluetooth?

Próbowałem dużo wyszukiwać w google i nie znalazłem żadnej odpowiedzi.

Czy ktoś wie, jak mogę go wdrożyć?

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

} 

I posiada również zezwolenie Bluetooth w moim pliku manifestu.

+1

http://stackoverflow.com/questions/3020407/how-to-find-signal-strength-ofected-bluetooth-devices –

+1

Już to widziałem, jednak nie ma żadnego przykładu, jak znaleźć sygnał siła ... może mi pomożesz? –

+0

Myślę, że twój kod jest OK. Aby zobaczyć Toast, musisz najpierw wykonać Discover. – Memochipan

Odpowiedz

26

Aby uzyskać sygnał, można sprawdzić Bluetooth RSSI, można odczytać RSSI dla podłączonych urządzeń lub wykonać wykrywanie Bluetooth, aby sprawdzić RSSI dla każdego urządzenia w pobliżu.

Zasadniczo wykrywanie Bluetooth to transmisja na wszystkie stacje w zasięgu, aby odpowiedzieć z powrotem. Ponieważ każde urządzenie reaguje, system Android odpala cel ACTION_FOUND. W tym celu możesz uzyskać Extract EXTRA_RSSI, aby uzyskać RSSI.

Należy pamiętać, że nie wszystkie urządzenia bluetooth obsługują interfejs RSSI.

Powiązane również: Android IRC Office Hours Question About Android Bluetooth RSSI tutaj jest przykładem

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(); 
     } 
    } 
}; 
+0

czy możesz dać mi przykład, jak mogę połączyć się z interfejsem RSSI i uzyskać z niego moc Bluetooth? –

+0

dziękuję, napisałem ten kod, jednak kiedy sparowałem z urządzeniem, nie pokazałem mi w Toast siły sygnału, czy masz inny sposób?Dodaję także moją aktywność do głównego wątku. –

+1

EXTRA_RSSI wartość jest krótkim typem zamiast int zmień go, a następnie sprawdź – Arvind

23

myślę kod jest ok, ale trzeba zaimplementować startDiscovery(), aby zobaczyć wyniki.

Prawda jest taka, że ​​BluetoothDevice.EXTRA_RSSI działa tylko przy wykrywaniu urządzeń, gdy łączysz się z jednym z nich, nie możesz już uzyskać jego RSSI.

Tutaj opracowałem bardzo prostą próbkę czynności, która pozwala zobaczyć RSSI urządzeń w pobliżu. Najpierw musisz dodać TextView i przycisk do swojego układu, następnie włączyć Adapter Bluetooth, a następnie kliknąć przycisk.

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

Wygląda to w ten sposób:

RSSI Detection - Android Example

+0

Czy możesz to sprawdzić [pytanie] (http://stackoverflow.com/questions/31761416/connect-to-bluetooth-programmatically) proszę? –

5

Niezbędna API została wprowadzona w API 18 (Android 4.3). Aby zainicjować żądanie, musisz zadzwonić pod numer BluetoothGatt#readRemoteRssi(). Odpowiedź pojawia się na oddzwanianie BluetoothCallback#onReadRemoteRssi(). (Jest to obiekt wywołania zwrotnego, który obsługuje łączenie, odnajdywanie, charakterystyczne odczyty, itp.)

Odbiornik rzeczy nadawanych nie jest już wymagany.

+0

Jak mogę tego używać w połączeniu z gniazdem Bluetooth Classic. – Herry