2010-07-06 11 views
7

Pracuję nad projektem badawczym, który obejmuje Bluetooth i system operacyjny Android. Muszę wykluczyć Bluetooth w nieskończoność, aby projekt mógł być kontynuowany.Ustaw Bluetooth na Androida 2.1 odkrywalny w nieskończoność

problem: Granice

  • Android wykrywalność do 300 sekund.
  • Nie mogę prosić użytkownika co 300 sekund, aby ponownie włączyć rozpoznawanie, ponieważ moja aplikacja została zaprojektowana do działania w tle bez przeszkadzania użytkownikowi.
  • O ile wiem,, nie ma sposobu na wydłużenie czasu przez GUI Androida. Niektóre źródła nazywają to funkcją bezpieczeństwa, inne nazywają to błędem. Nie może być trochę prawdy w obu ...

co usiłuję/Próbowaliśmy:

  • Próbuję edytować stabilne uwalnianie cyanogenmod włączyć wykrywalność timer wyłączony (jest to możliwe, istnieje plik konfiguracyjny, który musi mieć zmieniony jeden numer). To nie działa, ponieważ mam problemy z weryfikacją z wynikowym pakietem.
  • W zeszłym tygodniu pobrałem cyanogenmod source code, zmieniłem odpowiednią klasę w nadziei, że umożliwiłoby to wykrycie Bluetooth w nieskończoność i spróbowałem wykonać recompile. To nie działało, ponieważ (a) repo jest często zmieniane, co prowadzi do niestabilności baza kodu, której nie można skompilować (LUB, może to być, że używam go niepoprawnie, tylko dlatego, że wyglądało na to, że błąd kodu w wielu przypadkach nie oznacza, że ​​powinienem winić za wszystkie napotkane problemy!) i (b) repo zdecyduje się okresowo „ignoruj” mnie (ale nie zawsze, jak już wcześniej zdobyć bazę kodu!), odpowiadając na moje próby synchronizacji/związku z:

    śmiertelne: zdalny koniec wisiał nieoczekiwanie ectedly

Jak można sobie wyobrazić, powyższe dwie kwestie są problematyczne i bardzo frustrujące do czynienia.
Więcej informacji:

  • biegnę Android 2.1 za pośrednictwem CyanogenMod (V5 wierzę). Oznacza to, że telefon jest również zrootowany.
  • Mam telefon programisty, co oznacza, że ​​bootloader jest odblokowany.
  • Mój telefon to HTC Magic (32B).

Big Pytanie:

  • Jak mogę dokonać Bluetooth nieskończoność wykrywalne na Androidzie?
+1

Jeśli masz źródła, można korzystać z niektórych prywatnych API, aby włączyć Bluetooth wykrywalne bezpośrednio co 300 sekund. Jednak tak naprawdę nie wiem, czy jest to możliwe i jak to zrobić. –

+0

Mogę faktycznie zmienić kilka wartości w kodzie źródłowym i (teoretycznie) całkowicie wyłączyć 300-sekundowy timer. Niestety, mam wiele problemów z kompilacją, dlatego szukam tutaj alternatywy. Jeśli jednak uda mi się skompilować i mój pierwszy pomysł zawodzi, to jest to bardzo rozsądne rozwiązanie. Będę o tym pamiętać, dziękuję! –

+0

Ale wyłączenie timera 300-sekundowego oznacza, że ​​użytkownicy będą potrzebować niestandardowego ROM-a? –

Odpowiedz

0

Jeśli sprawdzeniu the BluetoothAdapter class

znajdziesz ukryte metody:

public void setDiscoverableTimeout(int timeout) 

Teraz trzeba tylko dowiedzieć się, jak go używać. Musisz zrobić wywołanie metody, aby to zrobić.

+1

BTW jak można go używać, nie jest rozpoznawalny kochany –

+0

W wielu wersjach Androida ta metoda ogranicza odkrywanie do kilku minut. –

+0

"BTW, jak możesz używać, nie jest rozpoznawalny" co masz na myśli przez "nie do rozpoznania"? ta metoda jest zdecydowanie w posiadaniu tej klasy. jest oznaczony jako @hide. możesz wywołać ukryte metody ... Oto przykład: http://stackoverflow.com/questions/3462968/how-to-unpair-bluetooth-device-using-android-2-1-sdk/6181809# 6181809 – Guntram

8

Patrz poniższy link: http://developer.android.com/guide/topics/wireless/bluetooth.html#ConnectingDevices

konkretnie, ostatnie zdanie w poniższym ustępie:

upoważniającego wykrywalność
Jeśli chcesz, aby urządzenie lokalne wykrywalny dla innych urządzeń , zadzwoń pod numer startActivityForResult(Intent, int) z intencją działania ACTION_REQUEST_DISCOVERABLE. Spowoduje to żądanie włączenia trybu wykrywalnego za pomocą ustawień systemowych (bez zatrzymywania aplikacji). Domyślnie urządzenie stanie się wykrywalne przez 120 sekund. Możesz zdefiniować inny czas trwania, dodając dodatkowe intencje EXTRA_DISCOVERABLE_DURATION. Maksymalny czas trwania aplikacji wynosi 3600 sekund, a wartość 0 oznacza, że ​​urządzenie jest zawsze wykrywalne.

Tak, to powinno działać:

Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0); 
startActivity(discoverableIntent); 
+0

To nie było dostępne w systemie Android 2.1. Był dostępny przynajmniej od wersji Androida 4, więc na nowszych urządzeniach, tak, to jest rozwiązanie. –

+0

Dokumenty mówią, że dodano go w 'android-5', więc powinno być 2.0 i wyżej: http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html # EXTRA_DISCOVERABLE_DURATION –

+0

nadal będzie wyświetlać potwierdzenie okna dialogowego użytkownika, @gymshoe .... nie są to rozwiązania – gumuruh

Powiązane problemy