2015-11-04 6 views
5

मैं example के साथ बीएलई स्कैनिंग के लिएका उपयोग कर रहा हूं। यह निगरानी और लेकर दोनों के लिए अग्रभूमि में ठीक काम करता है। हालांकि, पृष्ठभूमि के लिए, यह केवल ऐप और स्क्रीन ऑफ में "होम" दबाए जाने के मामलों के लिए काम करता है। जब मैं कार्य स्विचर से ऐप को मारता हूं तो यह काम नहीं करता है। उदाहरण में, मुझे पृष्ठभूमि में काम करने वाली चीज़ों को बनाने के लिए सेवा जैसी कुछ भी नहीं मिल रही है।एंड्रॉइड बीकन लाइब्रेरी वास्तव में पृष्ठभूमि स्कैनिंग का समर्थन करता है?

सवाल:

  1. करता है एंड्रॉयड बीकन लाइब्रेरी समर्थन पृष्ठभूमि स्कैनिंग एप्लिकेशन कार्य स्विचर में मार दिया जाता है तो क्या होगा?
  2. यदि हां, तो यह कैसे करें? कोई उदाहरण?
+0

वैसे उस स्थिति में जब ऐप पृष्ठभूमि में नहीं चल रहा है, तो आपको 'ब्रॉडकास्ट रिसीवर' और 'सेवा' का उपयोग करना चाहिए। ब्लूटूथ पर अपने प्रसारण कनेक्ट और डिस्कनेक्ट (बीकन के लिए स्टॉप सेवा) (बीकन के लिए सेवा को प्रारंभ) –

+0

'Estimote' बीकन का प्रयास के लिए' Filters' सेट वे अपने स्वयं के 'SDK' और कार्यान्वयन की है। मैंने एक ऐप बनाया है जिसमें मैंने एंड्रॉइड बीकन और बीएलई के बारे में समझने के लिए किसी भी शुरुआत के लिए यह बहुत उपयोगी उपयोग किया था। इस लिंक से https://github.com/Estimote/Android-SDK –

+1

@Zubair अहमदखान iBeacon लाइब्रेरी खोज अनुमानित बीकन के साथ-साथ कस्टम बीकन के लिए भी आज़माएं। – Lawrance

उत्तर

3

मैंने पृष्ठभूमि स्कैनिंग के लिए एंड्रॉइड आईबीओन लाइब्रेरी के साथ काम किया, मैंने एक सेवा बनाई और सेवा में मैंने निगरानी और लेकर दोनों को परिभाषित किया। जब सेवा नष्ट हो जाती है और मेरे लिए इसका काम होता है तो मैं सेवा शुरू करता हूं। इस तरह की नई सेवा बनाएं।

public class Beaconservice extends Service implements IBeaconConsumer { 
private ArrayList<IBeacon> arrayL = new ArrayList<IBeacon>(); 
private BeaconServiceUtility beaconUtill = null; 
private IBeaconManager iBeaconManager = IBeaconManager.getInstanceForApplication(this); 
private Handler hand; 
private Runnable runn; 
private int count = 30; 



@Override 
public void onIBeaconServiceConnect() { 
    iBeaconManager.setRangeNotifier(new RangeNotifier() { 
     @Override 
     public void didRangeBeaconsInRegion(Collection<IBeacon> iBeacons, Region region) { 
      arrayL.clear(); 
      arrayL.addAll((ArrayList<IBeacon>) iBeacons); 
      if(count>0){ 
       count=0;  
      } 
     } 
    }); 

    iBeaconManager.setMonitorNotifier(new MonitorNotifier() { 
     @Override 
     public void didEnterRegion(Region region) { 
      Log.e("BeaconDetactorService", "didEnterRegion"); 
      // logStatus("I just saw an iBeacon for the first time!"); 
     } 

     @Override 
     public void didExitRegion(Region region) { 
      Log.e("BeaconDetactorService", "didExitRegion"); 
      // logStatus("I no longer see an iBeacon"); 
     } 

     @Override 
     public void didDetermineStateForRegion(int state, Region region) { 
      Log.e("BeaconDetactorService", "didDetermineStateForRegion"); 
      // logStatus("I have just switched from seeing/not seeing iBeacons: " + state); 
     } 

    }); 

    try { 
     iBeaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null)); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 

    try { 
     iBeaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null)); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 

} 


@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 
@Override 
public void onCreate() { 
    beaconUtill = new BeaconServiceUtility(this); 
    Log.e("UUID","start service"); 

    hand = new Handler(); 
    runn = new Runnable() { 

     @Override 
     public void run() { 
      count ++; 
      hand.postDelayed(runn, 1000); 
     } 
    }; 

    hand.post(runn); 
    super.onCreate(); 

} 
@Override 
@Deprecated 
public void onStart(Intent intent, int startId) { 
    beaconUtill.onStart(iBeaconManager, this); 
    beaconUtill = new BeaconServiceUtility(this); 
    super.onStart(intent, startId); 
} 
@Override 
public void onDestroy() { 
    beaconUtill.onStop(iBeaconManager, this); 
    super.onDestroy(); 
} 
} 

AndroidManifest.xml

में
<service android:name="com.beacone.keyfinder.app.Beaconservice" > 
</service> 
+0

"एंड्रॉइड आईबेकॉन लाइब्रेरी" है जिसका आपने उल्लेख किया है [एंड्रॉइड बीकन लाइब्रेरी] (https://github.com/AltBeacon/android-beacon-library)? और क्या आप कुछ कोड उदाहरण के द्वारा ऐसा कुछ और साझा करेंगे? – Rice

+0

मैं इस डेमो https://github.com/Vinayrraj/Android-iBeacon-Demo उपयोग कर रहा हूँ –

+0

डेमो बस अग्रभूमि में स्कैनिंग दिखाया जा रहा है और पृष्ठभूमि में काम नहीं कर सकता।कृपया यह करने के लिए सलाह दें कि यह करने के लिए आपकी सेवा क्या करती है या बाध्य करती है। धन्यवाद। – Rice

-1
  1. नहीं है, और न ही किसी अन्य अनुप्रयोग है। टास्क स्विचर के माध्यम से एक कार्य को मारना मतलब है कि उस ऐप की प्रक्रिया को मारना, और चूंकि आपका पृष्ठभूमि स्कैन किसी सेवा पर निर्भर करता है, इसलिए सेवा भी मारे जाती है क्योंकि सेवाएं अपनी प्रक्रिया शुरू नहीं करती हैं।

  2. आपके पास शायद एक अलार्ममेनर हो सकता है जो समय-समय पर जांचता है कि आपकी सेवा चल रही है और यदि यह नहीं है तो इसे स्वचालित रूप से शुरू कर देता है, लेकिन मुझे लगता है कि यदि आप अंतराल को बहुत कम सेट करते हैं तो बैटरी बड़ी बारिश करेगा।

+1

है, जबकि यह सच है कि एक कार्य स्विचर से ऐप को मारने से सभी प्रक्रियाओं को मार दिया जाता है, एक ऐप के लिए खुद को पुनरारंभ करना संभव है ताकि पृष्ठभूमि सेवाएं विभिन्न तकनीकों का उपयोग कर चल सकें। एंड्रॉइड बीकन लाइब्रेरी यह अलार्ममेनर के साथ करता है। ऊपर मेरा जवाब देखें। – davidgyoung

2

हाँ, एंड्रॉयड बीकन लाइब्रेरी के बाद एप्लिकेशन मार दिया जाता है बीकन का पता लगाने के लिए जारी रहेगा, लेकिन यह फिर से शुरू करने स्कैनिंग के लिए समय ले सकते हैं। विवरण के लिए यहां देखें: http://altbeacon.github.io/android-beacon-library/resume-after-terminate.html

लाइब्रेरी इसे पूरा करने के लिए अलार्ममेनगर का उपयोग करती है, और स्कैनिंग को फिर से शुरू करने में पांच मिनट तक लग सकते हैं।

आपके द्वारा लिंक किए गए संदर्भ ऐप में वास्तव में RegionBootstrap कक्षा का उपयोग करके इसे सेट अप करने का एक उदाहरण है। यहां पृष्ठभूमि अनुभाग में एक एप शुरू करने के तहत कोड उदाहरणों में एक और वर्णनात्मक उदाहरण है: http://altbeacon.github.io/android-beacon-library/samples.html

+0

मैंने इस पर एक नज़र डाली और उदाहरण की कोशिश की। लेकिन ऐप की हत्या के बाद मैं इसे काम नहीं देख सकता। (ऐप को मारने के लगभग 30 मिनट बाद, मैं एक बीकन चालू करता हूं लेकिन ऐप स्कैन नहीं करता और नोटिस करता था) क्या आपने कोशिश की थी और क्या आप कृपया यह कैसे करेंगे इसके बारे में अधिक जानकारी प्रदान करेंगे? – Rice

+1

एंड्रॉइड 4.x पर डिफ़ॉल्ट पृष्ठभूमि स्कैन अवधि प्रत्येक 5 मिनट में एकसा है। तो टास्क स्विचर से ऐप को मारने के बाद, स्कैनिंग सेवा को फिर से शुरू करने में पांच मिनट लग सकते हैं, फिर एक सक्रिय स्कैन चक्र शुरू होने से पहले पांच मिनट तक। आप कनेक्टिंग पावर को भी आजमा सकते हैं, क्योंकि अलार्म विफल होने पर इसे स्कैनिंग के पुनरारंभ करने के द्वितीयक तरीके के रूप में उपयोग किया जाता है। – davidgyoung

संबंधित मुद्दे