2010-07-06 6 views
7

Je travaille sur un projet de recherche impliquant Bluetooth et l'OS Android. J'ai besoin de rendre le Bluetooth détectable indéfiniment pour que le projet continue.Rendre Bluetooth sur Android 2.1 détectable indéfiniment

Le problème:

  • limites Android à 300 secondes de découvrir.
  • Je ne peux pas demander à l'utilisateur toutes les 300 secondes de réactiver la reconnaissance car mon application est conçue pour fonctionner en arrière-plan sans déranger l'utilisateur.
  • Pour autant que je sache, il n'y a aucun moyen d'augmenter le temps via l'interface graphique d'Android. Certaines sources ont appelé cela une fonction de sécurité, d'autres ont appelé cela un bug. Il peut y avoir un peu de vérité dans les deux ...

Ce que je veux/vous essayé:

  • Je suis en train de modifier une version stable de cyanogenmod tourner la possibilité de découvrir timer désactivé (c'est possible, il y a un fichier de configuration qui doit avoir un seul numéro changé). Cela ne fonctionne pas parce que j'ai des problèmes de vérification avec le paquet résultant.
  • Au cours de la semaine dernière, j'ai téléchargé le cyanogenmod source code, a changé une classe pertinente dans l'espoir qu'il rendrait Bluetooth détectable indéfiniment, et a essayé de recompile. Cela n'a pas fonctionné parce que (a) le repo est fréquemment changé, conduisant à un instable base de code qui ne parvient pas à compiler (OU, il se pourrait que je l'utilise incorrectement, juste parce qu'il semblait que c'était la faute du code dans de nombreux cas ne signifie pas que je devrais le blâmer pour tous les problèmes que j'ai rencontrés!) (b) la prise en pension décide périodiquement me « ignorer » (mais pas toujours, comme je l'ai obtenu la base de code avant!), répondant à mes tentatives de synchronisation/connexion avec:

    fatale: l'extrémité distante accroché jusqu'à unexp ectedly

Comme vous pouvez l'imaginer, les deux questions ci-dessus sont problématiques et très frustrant de traiter.
Plus d'info:

  • Je suis sous Android 2.1 via CyanogenMod (v5 je crois). Cela signifie que le téléphone est également enraciné.
  • J'ai un téléphone développeur, ce qui signifie que le bootloader est déverrouillé.
  • Mon téléphone est un HTC Magic (32B).

La grande question:

  • Comment puis-je faire Bluetooth indéfiniment découvrable sur Android?
+1

Si vous avez la source, vous pouvez utiliser une api privé pour activer le Bluetooth découvrables directement toutes les 300 secondes. Cependant, je ne sais pas vraiment si c'est possible et comment le faire. –

+0

Je peux réellement changer quelques valeurs dans le code source et (théoriquement) éteindre complètement le temporisateur de 300 secondes. Malheureusement, j'ai une multitude de problèmes à résoudre, c'est pourquoi je cherche une alternative ici. Cependant, si je peux le compiler et que ma première idée échoue, alors c'est une solution très raisonnable. Je vais le garder à l'esprit, merci! –

+0

Mais en éteignant le minuteur de 300 secondes, voulez-vous dire que les utilisateurs auraient besoin de votre rom personnalisé? –

Répondre

0

Si vous consultez the BluetoothAdapter class

vous trouverez la méthode cachée:

public void setDiscoverableTimeout(int timeout) 

Maintenant, il suffit de savoir comment l'utiliser. Vous devez faire une invocation de méthode pour le faire.

+1

BTW comment pouvez-vous utiliser, il n'est pas reconnaissable cher –

+0

Dans de nombreuses versions d'Android, cette méthode restreint la découvrabilité à quelques minutes. –

+0

"BTW comment pouvez-vous utiliser, il n'est pas reconnaissable cher" que voulez-vous dire par "pas reconnaissable" ?? cette méthode est définitivement détenue par cette classe. il est marqué comme @hide. vous pouvez invoquer des méthodes cachées ... voici un exemple http://stackoverflow.com/questions/3462968/how-to-unpair-bluetooth-device-using-android-2-1-sdk/6181809# 6181809 – Guntram

8

Voir le lien suivant: http://developer.android.com/guide/topics/wireless/bluetooth.html#ConnectingDevices

Plus précisément, la dernière phrase du paragraphe ci-dessous:

Activation de découvrir
Si vous souhaitez faire le périphérique local découvrable à d'autres appareils , appelez startActivityForResult(Intent, int) avec l'intention d'action ACTION_REQUEST_DISCOVERABLE. Cela émet une demande pour activer le mode détectable via les paramètres du système (sans arrêter votre application). Par défaut, l'appareil deviendra détectable pendant 120 secondes. Vous pouvez définir une durée différente en ajoutant l'intention EXTRA_DISCOVERABLE_DURATION supplémentaire. La durée maximale qu'une application peut définir est de 3600 secondes, et une valeur de 0 signifie que l'appareil est toujours détectable.

Donc, cela devrait fonctionner:

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

Ce n'était pas disponible dans Android 2.1. Il était disponible au moins depuis Android 4, donc sur les nouveaux appareils, oui, c'est une solution. –

+0

Les docs disent qu'il a été ajouté dans 'android-5', donc il devrait être 2.0 et plus: http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html # EXTRA_DISCOVERABLE_DURATION –

+0

il donnera toujours la confirmation de dialogue de l'utilisateur, @ gymshoe .... pas les solutions que je suppose – gumuruh

Questions connexes