2015-10-20 12 views
6

Sto cercando di utilizzare l'API di Google nelle vicinanze per rilevare i beacon (Eddystone). L'unico approccio attuale al momento sembra chiamare Nearby.Messages.subscribe() come descritto here.API nelle vicinanze, qual è il modo corretto di scansionare i beacon in background?

Il problema è che questo non sembra essere adatto per la scansione continua in background. La mia app deve continuare a monitorare i beacon in background, quindi se uno diventa visibile, eseguirà una chiamata a un'API REST. Fondamentalmente, avrei bisogno di qualcosa di simile alla funzione beacon monitorning fornita da Estimote SDK.

Ciò sarebbe possibile ottenere con l'API nelle vicinanze senza scaricare la batteria?

risposta

0

Sembra che l'unico modo per eseguire ciò che si desidera sia la scansione continua o l'uso della posizione del dispositivo e del beacon per attivare una scansione quando sono vicini. In entrambi i casi, vi è uno scaricamento della batteria quando si esegue la scansione o la condivisione della posizione. Sembra che i beacon Estimote utilizzino l'approccio location, che è probabilmente l'approccio migliore in termini di risparmio della batteria.

2

Mi rendo conto che questa domanda riguarda l'utilizzo dell'API nelle vicinanze, ma non conosco un modo per utilizzarlo per soddisfare le vostre esigenze.

Se si è aperti alle alternative, il servizio gratuito e open source Android Beacon Library supporta pienamente i fari di Eddystone. La sua API è modellata in base alle API di monitoring/ranging beacon di iOS, quindi farà esattamente ciò che desideri.

See here per come usare questa libreria per monitorare i fari di Eddystone.

0

È possibile iscriversi anche in background per ricevere Intenzioni anziché notifiche MessageListener. La scansione in background è una scansione a basso consumo, quindi la latenza può essere molto lunga (anche i minuti per rilevare il beacon). La scansione viene eseguita all'evento sullo schermo o quando altre app lo richiedono. Quindi ricevi risultati da altre scansioni di app.

È possibile creare GoogleApiClient utilizzando il contesto dell'applicazione anziché il contesto dell'attività. Chiamalo da un ricevitore broadcast che reagisce alla trasmissione BOOT_COMPLETED.

GoogleApiClient client = new GoogleApiClient.Builder(appContext) 
    .addApi(Nearby.MESSAGES_API, new MessagesOptions.Builder() 
     .setPermissions(NearbyPermissions.BLE) 
     .build()) 
    .build(); 
client.connect(); 

Una volta che il client è connesso (il metodo di ConnectionCallbacks onConnected) è possibile utilizzare subscribe PendingIntent e creare il ricevitore broadcast che gestisce l'intento.

Nel ricevitore di trasmissione, è possibile gestire l'intento utilizzando il metodo Nearby.Messages.handleIntent che utilizza lo stesso MessageListener come scansione in primo piano.

Uno dei problemi con questo approccio sono le autorizzazioni per accedere nelle vicinanze. Per consentire all'utente di approvare l'accesso a Nearby hai bisogno dell'interfaccia utente. La mia soluzione era di aspettare con la scansione in background fino a quando l'utente per la prima volta apre l'app e accetta le autorizzazioni. Una volta accettato puoi iscriverti in background.

Problemi correlati