2011-06-15 5 views
4

Bon, j'ai une question un peu étrange ici. Je travaille sur un jeu Android où j'aimerais pouvoir faire en sorte que les téléphones Android détectent la présence l'un de l'autre. L'appareil recherchant d'autres lecteurs connaîtra les adresses MAC bluetooth des appareils des autres joueurs (à partir d'un DB de jeu), mais les appareils ne seront pas couplés et les appareils ne seront pas en mode détectable. En outre, il y aura seulement une poignée de dispositifs qui pourraient être trouvés - donc ce n'est pas un gros problème à parcourir les adresses mac.Détection d'un autre appareil Android à proximité via Bluetooth

Je n'ai pas besoin de me connecter aux périphériques, je dois juste pouvoir répondre à une question simple: cet appareil avec cette adresse mac est-il proche?

Il est permis d'avoir une boîte de dialogue d'appairage sur l'écran de l'autre utilisateur ... Peu m'importe le résultat de leur choix ... J'ai juste besoin de savoir si leur appareil est là.

Toute aide serait grandement appréciée!

+0

Après un peu plus de recherches, il semble que cela peut être possible en utilisant SDP et quelques méthodes cachées dans Android: http://wiresareobsolete.com/wordpress/2010/11/android-bluetooth-rfcomm/ J'espère que je serai en mesure d'utiliser cette technique SDP même lorsque le les périphériques ne sont pas détectables. – ebarch

+0

Après tout ce temps .. avez-vous des mises à jour sur l'ensemble du problème de proximité bluetooth? Je sais qu'il y a la capacité mais j'aimerais bien avoir ou implémenter ma propre méthode 'calcDistanceOfBluetoothDevice' même si c'est un calcul approximatif! –

Répondre

2

Ce cas d'utilisation peut convenir à l'API Nearby récemment publiée. Voir les messages à proximité developer overview

A proximité a sa propre autorisation d'exécution qui vous évite d'ajouter BLUETOOTH_ADMIN ou similaire à votre manifeste. Il fonctionne sur iOS et Android en utilisant plusieurs technologies (Bluetooth classique, BLE, échographie). Il y a une option pour utiliser seulement le modem à ultrasons qui réduit la portée à environ 5 pieds.

J'ai inclus un exemple partiel ci-dessous, vous pouvez trouver un échantillon plus complet sur github

// Call this when the user clicks "find players" or similar 
// In the ResultCallback you'll want to trigger the permission 
// dialog 
Nearby.Messages.getPermissionStatus(client) 
    .setResultCallback(new ResultCallback<Status>() { 
    public void onResult(Status status) { 
     // Request Nearby runtime permission if missing 
     // ... see github sample for details 
     // If you already have the Nearby permission, 
     // call publishAndSubscribe() 
    } 
    }); 

void publishAndSubscribe() { 
    // You can put whatever you want in the message up to a modest 
    // size limit (currently 100KB). Smaller will be faster, though. 
    Message msg = "your device identifier/MAC/etc.".getBytes(); 
    Nearby.Messages.publish(googleApiClient, msg) 
     .setResultCallback(...); 

    MessageListener listener = new MessageListener() { 
    public void onFound(Message msg) { 
     Log.i(TAG, "You found another device " + new String(msg)); 
    } 
    }); 

    Nearby.Messages.subscribe(googleApiClient, listener) 
    .setResultCallback(...); 
} 

Responsabilité Je travaille sur l'API à proximité

Questions connexes