2010-07-06 5 views
7

Ich arbeite an einem Forschungsprojekt, das Bluetooth und das Android OS umfasst. Ich muss Bluetooth für unbegrenzte Zeit erkennbar machen, damit das Projekt fortgesetzt werden kann.Machen Sie Bluetooth auf Android 2.1 erkennbar unbegrenzt

Das Problem:

  • Android Grenzen Auffindbarkeit bis 300 Sekunden.
  • Ich kann den Benutzer nicht alle 300 Sekunden bitten, die Auffindbarkeit wiederherzustellen, da meine Anwendung im Hintergrund ausgeführt wird, ohne den Benutzer zu stören.
  • Soweit ich weiß, gibt es keine Möglichkeit, die Zeit über Android GUI zu erhöhen. Einige Quellen nennen dies ein Sicherheitsmerkmal, andere nennen dies einen Fehler. Es kann ein bisschen Wahrheit in beiden sein ...

, was ich versuche/haben versucht:

  • Ich versuche, eine stabile Version von cyanogenmod zu bearbeiten, um die Auffindbarkeit zu drehen Timer aus (es ist möglich; es gibt eine Konfigurationsdatei, bei der eine einzelne Nummer geändert werden muss). Dies funktioniert nicht, da ich mit dem resultierenden Paket Verifikationsprobleme habe.
  • Während der letzten Woche, die ich heruntergeladen cyanogenmod source code, änderte eine relevante Klasse in der Hoffnung, dass es Bluetooth dauerhaft erkennbar machen würde, und versuchte recompile. Dies funktionierte nicht, weil (a) der Repo häufig geändert wird, was zu einem instabilen Code-Basis, die nicht kompiliert werden kann (ODER, könnte es sein, dass ich es falsch benutze; nur weil es so aussah, als wäre der Code in vielen Fällen fehlerhaft, bedeutet das nicht, dass ich es für alle Probleme verantwortlich machen sollte!) und (b) entscheidet die Repo „ignorieren“ mich in regelmäßigen Abständen (aber nicht immer, wie ich die Code-Basis, bevor bekommen haben!), antworten auf meine Synchronisierung/Verbindungsversuche mit:

    fatal: das entfernte Ende hing up unexp ectedly

Wie Sie sich vorstellen, die beiden oben genannten Probleme sind problematisch und sehr frustrierend zu behandeln.
Mehr Info:

  • Ich bin mit Android 2.1 über CyanogenMod (v5 glaube ich). Dies bedeutet, dass das Telefon auch verwurzelt ist.
  • Ich habe ein Entwickler-Telefon, was bedeutet, dass der Bootloader entsperrt ist.
  • Mein Telefon ist ein HTC Magic (32B).

Die große Frage:

  • Wie kann ich Bluetooth auf Android auf unbestimmte Zeit auffindbar?
+1

Wenn Sie die Quelle haben, können Sie einige private api Bluetooth auffindbar verwenden könnte direkt alle 300 Sekunden zu drehen. Allerdings weiß ich nicht wirklich ob es möglich ist und wie man das macht. –

+0

Ich kann tatsächlich ein paar Werte im Quellcode ändern und (theoretisch) den 300-Sekunden-Timer ganz ausschalten. Leider habe ich eine Menge Probleme beim Kompilieren, weshalb ich hier eine Alternative suche. Aber wenn ich es kompilieren kann und meine erste Idee fehlschlägt, dann ist das eine sehr vernünftige Lösung. Ich werde es mir merken, danke! –

+0

Aber wenn Sie den 300-Sekunden-Timer ausschalten, meinen Sie, dass die Benutzer Ihre benutzerdefinierte ROM benötigen? –

Antwort

0

Wenn Sie überprüfen the BluetoothAdapter class

Sie die verborgene Methode finden:

public void setDiscoverableTimeout(int timeout) 

Jetzt müssen Sie nur herausfinden, wie es zu benutzen. Sie müssen dazu einen Methodenaufruf durchführen.

+1

BTW wie kann man es verwenden, ist es nicht erkennbar, lieber –

+0

In vielen Android-Versionen beschränkt diese Methode die Auffindbarkeit auf ein paar Minuten. –

+0

"BTW wie kannst du es verwenden, ist es nicht erkennbar, lieber" was meinst du mit "nicht erkennbar" ?? Diese Methode wird definitiv von dieser Klasse gehalten. ist es als @hide markiert. Sie können versteckte Methoden aufrufen ... hier ist ein Beispiel http://StackOverflow.com/Questions/3462968/How-to-Unpair-Bluetooth-Device-using-android-2-1-sdk/6181809# 6181809 – Guntram

8

Siehe den folgenden Link: http://developer.android.com/guide/topics/wireless/bluetooth.html#ConnectingDevices

Insbesondere der letzte Satz im Absatz unten:

Aktivieren Auffindbarkeit
Wenn Sie das lokale Gerät für andere Geräte erkennbar machen möchten Rufen Sie startActivityForResult(Intent, int) mit der ACTION_REQUEST_DISCOVERABLE Aktion Intent. Dadurch wird eine Anforderung zum Aktivieren des erkennbaren Modus über die Systemeinstellungen ausgegeben (ohne die Anwendung anzuhalten). Standardmäßig wird das Gerät 120 Sekunden lang sichtbar. Sie können eine andere Dauer definieren, indem Sie den Zusatz EXTRA_DISCOVERABLE_DURATION Extra hinzufügen. Die maximale Dauer, die eine App festlegen kann, beträgt 3600 Sekunden, und ein Wert von 0 bedeutet, dass das Gerät immer erkennbar ist.

So sollte diese Arbeit:

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

Dies war in Android 2.1 nicht verfügbar. Es war mindestens seit Android 4 verfügbar, also auf neueren Geräten, ja, das ist eine Lösung. –

+0

Die Dokumentation sagt, dass es in 'android-5' hinzugefügt wurde, also sollte es 2.0 und höher sein: http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html # EXTRA_DISCOVERABLE_DURATION –

+0

es wird immer noch die Benutzerdialog Bestätigung geben, @gymshoe .... nicht die Lösungen, die ich denke – gumuruh