2017-07-12 19 views
12

Opracowuję aplikację na Androida, która wymaga umieszczania urządzeń obok siebie i/lub powyżej i poniżej siebie.Czy możliwe jest wykrywanie urządzeń Android leżących obok siebie?

Wiem, że mogę korzystać z interfejsu API W pobliżu, aby wykrywać urządzenia "w pobliżu", ale potrzebuję czegoś więcej "grzywny zboża".

Moja aplikacja musi być w stanie zidentyfikować urządzenie leżące po lewej stronie, powyżej, prawej stronie lub poniżej. Podczas gdy wszystkie urządzenia leżą płasko na stole (na przykład).

Nie mogę znaleźć niczego w Internecie opisującego ten przypadek użycia.

Czy to możliwe?

UPDATE

Moje przypadek użycia jest, że chcę urządzeń z Androidem, aby móc wykryć dowolną liczbę „Inne urządzenia” niosek albo ich w lewo lub prawo. Urządzenia będą układane poziomo z "małym" odstępem między nimi.

W ten sam sposób, w jaki można układać litery z literami dla dzieci, aby przeliterować słowo lub frazę, lub ponumerowane bloki, aby utworzyć sumę.

nie tylko linia urządzeń powinna być w stanie wykryć swoich najbliższych sąsiadów po ich lewej i prawej stronie dwa urządzenia na obu końcach powinny być w stanie wykryć, że są to początek i koniec linii (od lewej do prawej) linii .

+1

Nawet jeśli był telefon, który mógł wykryć takie położenie, domyślam się, że nie wszystkie telefony potrafią to zrobić. –

+1

Czy to byłaby opcja, aby zainicjować urządzenia za pomocą gestów dotykowych? lub czy muszą znać swoją pozycję automatycznie? – Katharina

+2

GPS jest jedyną rzeczą, o której mogę pomyśleć. Jednak nie jestem pewien co do dokładności i nie zadziała w budynku. Możesz połączyć to z NFC. –

Odpowiedz

3

Korzystanie z czujników zbliżeniowych jest prawdopodobnym sposobem na rozwiązanie problemu. TYPE_PROXIMITY podaje odległość od obiektu bliskiego. TYPE_MAGNETIC_FIELD podaje siłę pola geomagnetycznego na x/y/z.

Więcej informacji na Position Sensors.

+0

Wydaje się, że nie, ponieważ czujnik TYPE_PROXIMITY określa, jak blisko jest twarz urządzenia, ale nie identyfikuje urządzenia położonego po lewej stronie, powyżej, prawej stronie lub poniżej. TYPE_MAGNETIC_FIELD nie podaje żadnych informacji o lokalizacji najbliższych obiektów. I nawet jeśli umieścisz magnetyczną etykietę na drugim urządzeniu, będzie można określić tylko odległość do niego, ale nie kierunek. –

1

Wygląda na to, że masz tylko 2 urządzenia, ale jeśli masz zewnętrzne źródła (o znanej pozycji) dowolnego sygnału (audio, wibracje, radio BT lub WiFi itp.), Które mogą być wykryte przez urządzenia dokładność i urządzeń czas jest synchronizowany, można to zrobić tym razem porównywanie sygnał startu (lub moc sygnału) na obu urządzeniach jak na tym zdjęciu:

Example

albo, jeśli można dodać kilka czujników do jednego z urządzenia, możesz utworzyć "lokalizator innych urządzeń", na przykład taki, jak lokalizator dźwięków this.

UPDATE

W zaktualizowanym preparatu, problemem jest również nie rozwiązywalne: jest to możliwe, aby ustalić, które urządzenia znajdują się na krawędzi, ale nie można ustalić, który z nich jest po lewej stronie, a które znajduje się na prawo bok. Konieczne jest, aby co najmniej jedno urządzenie wiedziało, że na przykład jest ono najdalej wysunięte - wtedy inne urządzenia, na przykład, generują dźwięk, inne odbiorą go i ustalą kolejność zgodnie z różnicą czasu przybycia. Ale punkt zakotwiczenia i synchronizacja czasu są konieczne.

+0

@Hector Bieganie z tym pomysłem (wykrywanie czasu "znanego" sygnału) możesz_próbować mieć pierwszą maszynę w linii wyemitować "sygnał dźwiękowy", a pozostałe urządzenia nasłuchują ... To może być wystarczające, aby określić ich względną kolejność. Czas propagacji dźwięku (wyobrażam sobie) będzie o wiele mniejszy niż w przypadku BT/WIFI, że prawdopodobieństwo rozwią- zania różnic jest większe. Nie oznacza to, że są one ustawione w linii, ale mogą wydawać zamówienia, jeśli takowe są. – TripeHound

+0

@ TripeHound "To może wystarczyć, aby określić ich względną kolejność" - tylko na odległość, nie przez kierunek (lokalizację), na przykład: dwa urządzenia, po lewej i po prawej stronie w tej samej odległości, otrzymają sygnał jednocześnie. –

+0

Dlatego sugerowałem, żeby urządzenie _end_ było emitowane jako dźwięk ... wszystkie pozostałe (jeśli są w linii prostej) usłyszą je w inny sposób. I jak już powiedziałem, można się zmylić, jeśli urządzenia nie są w linii. To może być najlepsze, co OP może zrobić. (Bardziej skomplikowana opcja, jeśli oryginalna idea mogłaby w ogóle zadziałać, oznaczałaby, że wszystkie urządzenia emitowałyby krótkie dźwięki przy niewielkich częstotliwościach, wtedy możliwe byłoby "triangulowanie" między sobą, aby uzyskać pewne pojęcie o względnym położeniu). – TripeHound

2

Pomysł, w przypadku jest to istotne dla przypadku użycia:

  • faza konfiguracji
    • uruchomić aplikację na każdym urządzeniu w trybie „parowania”.
    • Każde urządzenie wyświetli kod QR zawierający klucz wymagany do komunikacji z urządzeniem (na przykład przez Firebase) oraz szczegóły ekranu: rozmiar w pikselach. Narysuje również prostokąt na granicach ekranu.
    • Inny telefon, poza tym układem, będzie uruchamiał Twoją aplikację jako "master", robiąc zdjęcie telefonów z góry.
    • Teraz trzeba napisać algorytm do identyfikacji ekranów i ich lokalizacji, orientacji i wyodrębnić kody QR do analizy. Nie łatwe, ale wykonalne.
  • faza Interakcje
    • teraz wszystkie telefony (to powinno działać na więcej niż dwa telefony) mogą współpracować ekrany, aby pokazać części tego samego filmu, na przykład.
-1

Myślę sposób, ale może to wymagać nieco pracy. Najpierw sprawdź, czy 2 urządzenia są układane przez orientację urządzenia i za pomocą przyspieszeniomierza lub wektora obrotu, aby sprawdzić pochylenie, przechylenie itp.

Gdy masz pewność, że układają, wyślij dane z jednego urządzenia do drugiego za pomocą BT lub Wi-Fi . Dane powinny zawierać czas wysłania. Sprawdź czas retreive na innym urządzeniu również powinieneś sprawdzić opóźnienie w wysyłaniu i odzyskiwaniu danych. Jeśli możesz zauważyć wyraźne różnice czasu w ms dla niewielkich różnic odległości między urządzeniami, łatwo będzie sprawdzić, jak blisko są one zbliżone. Możesz również poprosić użytkowników, aby trzymali swoje urządzenie o 1 metr lub stałą odległość od siebie, aby uzyskać czas podróży dla BT lub sygnału wifi, który wyślesz do innego.

1

Zaniżając przypadek użycia, możliwe jest znalezienie liczby urządzeń w otoczeniu urządzenia hosta, przy użyciu funkcji W pobliżu Api, innych technik. Ale znajdź ile urządzeń z każdej strony !!! Nie sądzę, że jest to możliwe z obecnym mobilnym sprzętem i technologią. Ponieważ, biorąc pod uwagę wszystkie czynniki, czujniki magnetyczne są tylko najmniejszym możliwym rozwiązaniem. Ale obecne telefony komórkowe nie mają takiej możliwości.

Poniższy punkt sporządziłem na podstawie powyższych odpowiedzi. TYPE_ACCELEROMETER, TYPE_LINEAR_ACCELERATION, TYPE_MAGNETIC_FIELD, TYPE_ORIENTATION te czujniki reagują na pole magnetyczne wokół urządzenia (kompas reaguje na magnes). Możesz wypróbować aplikację przy użyciu TYPE_MAGNETIC_FIELD, sprawdzić, jak zareaguje na inne urządzenie, gdy jest blisko (myślę, że zareaguje).

Ale staram się tutaj przedstawić, jeśli umieścisz trzy urządzenia na jednej stronie i 4 urządzenia na drugiej stronie, czujnik MAGNETIC_FIELD odczytuje względne pole magnetyczne. Nie możemy więc określić, w jaki sposób urządzenia mogą z każdej strony, Dopóki nie dokonamy pewnych naukowych obliczeń.

Drugi punkt to jeden sugerowany czujnik TYPE_PROXIMITY, ale nie jest przeznaczony do tego celu. Obecne telefony komórkowe mierzą bliskość obiektu w cm względem ekranu widoku urządzenia. Ten czujnik jest zwykle używany do określenia, czy słuchawka jest trzymana w uchu osoby.

Inną najmniejszą możliwością jest użycie czujnika położenia, może identyfikować współrzędne względem współrzędnych urządzenia, komunikować się między każdą współrzędną urządzenia z hostem za pomocą NFC. Ale problem polega na tym, że twój przypadek użycia mówi, że te urządzenia są bardzo blisko siebie, więc nie jest to mierzalna odległość za pomocą usługi lokalizacyjnej.

Podsumowując, nie jest możliwe określenie numeru każdego urządzenia z każdej strony urządzenia hosta, z bieżącym urządzeniem mobilnym. Będzie można zarchiwizować za pomocą zewnętrznego czujnika, który rozszerzy możliwości mobilne.Na przykład w etui na telefon wyposażonym w taką możliwość otworzy to okno na inne przypadki użycia i aplikację.

2
  1. Tworzenie własnego próbnego GPS (lokalne PS). Nie mam linku do tego, ale jest to zdecydowanie możliwe. Sprawdź, jak działa GPS, aby uzyskać pomysł. Wi-Fi i Bluetooth są sygnałami. ale wiesz, co jeszcze jest sygnałem?

A: SOUND

zrobić każdy telefon uczynić duży sygnał z kolei i zmierzyć siłę dźwięku przy użyciu odbiorników. To może działać lepiej niż wifi/bluetooth. po zmierzeniu względnych odległości między każdą parą telefonów, wystarczy znaleźć dobry algorytm, aby znaleźć względne pozycje.

  1. Możliwe rozwiązanie alternatywne: użyj przetwarzania obrazu. Uzyskaj coś w rodzaju OpenCV for Android i skonfiguruj jeden telefon jako master. To zadziała tylko w przypadku układu 2D.

  2. Kolejny "pomysł" - użyj kamer. Przyklej kartę na wierzchu za pomocą 4 kodów QR w każdym rogu. (Pomoże to zidentyfikować krawędzie i orientację telefonu). Jeśli szukasz układu 3D, a telefony mają wystarczającą przestrzeń pośrednią, możesz umieścić kod QR za każdym telefonem i wyświetlić kod QR na ekranie każdego telefonu.

Wszystkie te rozwiązania. Może możesz użyć pojedynczych. Może możesz użyć kombinacji. kto wie.