मैं एक एंड्रॉइड एप्लिकेशन पर काम कर रहा हूं जो आरएसएसआई बीकन सिग्नल के आधार पर संदेश प्रदर्शित करता है। पृष्ठभूमि में बीकन को स्कैन करने वाला वर्ग एक गतिविधि नहीं है (लेकिन वर्ग अनुप्रयोग बढ़ाता है), इसलिए मैं सीधे इस कक्षा में कुछ सूचनाओं के साथ एक संवाद प्रदर्शित नहीं कर सकता। तो मैं किसी अन्य गतिविधि में इस वर्ग से RSSI सिग्नल कैसे प्राप्त करूं और फिर संवाद प्रदर्शित करूं?

यहाँ कक्षा में फ़ंक्शन है जो बीकन को स्कैन करता है:

@Override                                                              
public void onBeaconServiceConnect(){
    mBeaconManager.setRangeNotifier(new RangeNotifier() {

        @Override
        public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {                                                       
             if(beacons.size() > 0) {
                  for (Beacon beacon: beacons) {
                      if(beacon.getRssi() >= - 50) {

                         ... i want here show a dialog

                      }

                  }
              }
         }
    });
}
0
L. White 23 फरवरी 2019, 03:44

1 उत्तर

सबसे बढ़िया उत्तर

एक संवाद प्रस्तुत करने के लिए आपके पास अग्रभूमि में एक गतिविधि होनी चाहिए। एंड्रॉइड एप्लिकेशन के लिए हमेशा ऐसा नहीं होता है, विशेष रूप से एक जिसे बीकन डिटेक्शन द्वारा पृष्ठभूमि में लॉन्च किया जा सकता है। यदि अभी तक कोई गतिविधि शुरू नहीं की गई है, तो आप एप्लिकेशन क्लास से एक गतिविधि शुरू कर सकते हैं (संभव है लेकिन आमतौर पर इसे एक बुरा अभ्यास माना जाता है) या आप इस मामले में बस अपने संवाद को दबा सकते हैं।

अपने एप्लिकेशन वर्ग से संवाद को ट्रिगर करने के लिए, आपको अग्रभूमि में जो भी गतिविधि है, उसके साथ संवाद करने की आवश्यकता है। ऐसा करने के लिए बहुत सारे शानदार तरीके हैं (स्थानीय ब्रॉडकास्ट रिसीवर, और विभिन्न डिज़ाइन पैटर्न) लेकिन सबसे आसान है अपनी गतिविधि के संदर्भ को अपने एप्लिकेशन क्लास पर सदस्य चर के रूप में स्टोर करना जैसे:

private MyActivity myActivity;

public  setMyActivity(MyActivity a) {
  myActivity = activity;
}

फिर संवाद प्रस्तुत करने के लिए अपनी MyActivity कक्षा पर एक विधि बनाएं:

public void show dialog() {
...
}

अंत में, उस विधि को अपने पहचान कोड के अंदर कॉल करें:

if(beacon.getRssi() >= - 50) {
      if (myActivity != null) {
         myActivity.showDialog();
      }
 }

आप वास्तव में इस साइट पर संवाद प्रस्तुति करने के लिए कोड के बहुत सारे उदाहरण पा सकते हैं।

एक अंतिम युक्ति: अपने संवाद को प्रत्येक बाद के बीकन डिटेक्शन के साथ हर सेकेंड में बार-बार प्रस्तुत होने से रोकने के लिए सावधान रहें! इसके लिए आपको कुछ अतिरिक्त तर्क की आवश्यकता होगी

0
davidgyoung 23 फरवरी 2019, 03:21