2015-10-20 14 views
6

İşaret lambalarını (Eddystone) algılamak için Google'ın Yakındaki API'sini kullanıyorum. Şu andaki tek mevcut yaklaşım, here açıklandığı gibi Nearby.Messages.subscribe() numaralı telefonu arıyor gibi görünüyor.Yakın API, arka planda işaretçiler için doğru tarama yöntemi nedir?

sorunu bu arka planda sürekli tarama için uygun görünmüyor olmasıdır. Uygulamamın, arka planda izleme işaretlerini tutması gerekir. Böylece, görünür hale gelirse, bir REST API'sine çağrı yapar. Temel olarak, Estimote SDK tarafından sağlanan beacon monitorning özelliğine benzer bir şeye ihtiyacım var.

Bu, aküyü boşaltmadan yakındaki API ile elde edilebilir mi?

cevap

0

Ya sürekli taramak için, ya da yakın zaman bir tarama tetiklemek için cihaz ve işaret yerini kullanmaktır istediğini yapmak için tek yol gibi görünüyor. Her iki şekilde de, ya tarama yaptığınız ya da paylaştığınız için pil boşaltma işlemi yapılır. Estimote fenerleri, pil tasarrufu açısından muhtemelen daha iyi bir yaklaşım olan konum yaklaşımını kullanıyor gibi görünüyor.

2

bu soru Yakın API nasıl kullanılacağı hakkında fark, ama senin gereksinimlerini karşılamak için kullanmak için bir yol bilmiyorum. Eğer alternatiflere açık ise

, ücretsiz ve açık kaynak Android Beacon Library Eddystone işaretleri tam destek var. API'sı, iOS izleme/aralık işaretçisi API'larından sonra modellenir, böylece tam olarak ne istediğinizi yapar. Eddystone işaretleri izlemek için bu kütüphaneyi nasıl kullanılacağı için

See here.

0

Sen MessageListener bildirimleri yerine Niyet almak için arka planda da abone olabilirsiniz. Arka plan taraması düşük güç taramasıdır, bu nedenle gecikme süresi çok uzun olabilir (işaretin algılanması için dakikalar bile olsa). Tarama, ekran üstü etkinlikte veya başka bir uygulama istediğinde gerçekleştirilir. Yani diğer uygulamaların taramalarından sonuç alırsınız.

GoogleApiClient'i, etkinlik içeriği yerine uygulama içeriğini kullanarak oluşturabilirsiniz. Bunu, BOOT_COMPLETED yayına tepki veren bir yayın alıcısından çağırın.

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

istemcisi olabilir subscribe PendingIntent kullanılarak ve amaç kolları yayın alıcısı oluşturmak (ConnectionCallbacks arasında onConnected yöntemi) bağlandığında.

Yayın alıcısında, ön planda tarama olarak aynı MessageListener'ı kullanan Nearby.Messages.handleIntent yöntemini kullanarak kasıtlı olarak işlem yapabilirsiniz.

Bu yaklaşımla ilgili sorunlardan biri, yakındaki erişim izinleridir. Kullanıcının yakındaki erişimi onaylamasına izin vermek için kullanıcı arayüzüne ihtiyacınız var. Uygulamam, uygulamayı ilk kez açtığında ve izinleri kabul edene kadar arka plan taraması yapmak için beklemekti. Kabul edildikten sonra arka planda abone olabilirsiniz.