2016-10-19 5 views
1

Я пытаюсь создать простую программу, которая обнаруживает, какие устройства находятся поблизости, используя любые датчики на других устройствах (Wi-Fi, Bluetooth и т. Д.). Подумайте об этом как о приложении, которое может обнаружить, когда владелец близко к дому и отправит сообщение на другое устройство (например, малиновый PI или что-то еще), чтобы автоматически разблокировать дверь.Обнаружение, если смартфон находится в диапазоне

  1. Какие датчики могут быть использованы?
  2. Может ли быть получена уникальная идентифицируемая информация (например, имя устройства, идентификатор устройства, MAC-адрес) без сопряжения/соединения?

ответ

1

Вы можете добиться этого с помощью Bluetooth. 1) Удалите из парного списка, если оба находятся в паре. 2) Сканирование для Bluetooth

registerReceiver(receiver, new IntentFilter(BluetoothDevice.ACTION_FOUND)); 

и здесь вы получите близлежащие устройства

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); 
     // Use this as signal(device is near or Far) 
     Toast.makeText(getApplicationContext()," RSSI: " + rssi + "dBm", Toast.LENGTH_SHORT).show(); 
    } 
} 
}; 
+0

ОК, имеет смысл. Я начинаю понимать, что это не сработает с телефоном. Я думаю, что я просто использую тег bluetooth keychain, потому что Bluetooth на другом телефоне может быть отключен. – Kiril

0
  1. BlueTooth каналу

    Как сказал @Ganesh Pokale, мы можем начать сканирование с поддержкой BLUETOOTH первым, если друга bluetooth включен и может быть обнаружен, тогда мы можем получить трансляцию. Чтобы начать обнаружение, используйте BluetoothAdapter.startDiscovery. В полученном нами действии мы можем получить класс BluetoothDevice, который содержит имя devicename, адрес bluetooth mac и т. Д. Я предлагаю вам найти более подробную информацию в Android API Guides Bluetooth.

  2. WifiDirect

    WifiDirect также называется «WIFi P2P», если друга WifiDirect дальше, мы можем сканировать их, и получить их информацию, но это немного complicater, чем Bluetooth. Во-первых, мы начинаем использовать сканирование WifiP2pManager.discoverPeers. Этот вызов является асинхронным, и нам нужен широковещательный приемник для получения результатов. В трансляторе вещания, если action равно WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION, тогда мы можем запросить доступные одноранговые узлы с WifiP2pManager.requestPeers(mChannel, myPeerListListener). Метод requestPeers() также асинхронный, и мы получим список устройств в myPeerListListener. Этот список будет содержать класс WifiP2pDevice, который содержит имя devicename, wifip2p mac и т. Д. Я предлагаю вам найти более подробную информацию в Android API Guides WifiP2pManager.

Смежные вопросы