वाई-फ़ाई की जगह की जानकारी: आरटीटी की सुविधा

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

अगर तीन या उससे ज़्यादा ऐक्सेस पॉइंट की दूरी मापी जाती है, तो मल्टीलेटेशन एल्गोरिदम की मदद से, उन डिवाइस की पोज़िशन का पता लगाया जा सकता है जो उनके लिए सबसे सही हैं माप. आम तौर पर, नतीजा एक से दो मीटर के अंदर सटीक हो जाता है.

इस सटीक जानकारी के साथ, आप सटीक स्थान-आधारित सेवाएं विकसित कर सकते हैं, जैसे के रूप में, साफ़ तौर पर आवाज़ से कंट्रोल करने की सुविधा का इस्तेमाल करें (उदाहरण के लिए, "इसे चालू करें" हालांकि, लाइट” और जगह के आधार पर जानकारी (उदाहरण के लिए, "क्या कोई खास ऑफ़र उपलब्ध है" ?")

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

वाई-फ़ाई आरटीटी और फ़ाइन-टाइम-मेज़रमेंट (एफ़टीएम) से जुड़ी सुविधाएं आईईईई 802.11-2016 मानक के मुताबिक तय किए गए हैं. वाई-फ़ाई आरटीटी के लिए, सटीक समय ज़रूरी है FTM से मिली माप, क्योंकि यह दो के बीच की दूरी की गणना करती है इसके बीच, डिवाइसों के बीच आने-जाने में पैकेट के लिए लगने वाले समय को मापता है और उस समय को प्रकाश की गति से गुणा कर रहा है.

Android वर्शन के आधार पर लागू करने में अंतर

वाई-फ़ाई आरटीटी को Android 9 (एपीआई लेवल 28) में पेश किया गया था. इस प्रोटोकॉल का इस्तेमाल करते समय चल रहे डिवाइसों के साथ, मल्टीलेटेशन का इस्तेमाल करके किसी डिवाइस की पोज़िशन पता करने के लिए Android 9 के लिए, आपके पास पहले से तय किए गए ऐक्सेस पॉइंट (एपी) की जगह की जानकारी का ऐक्सेस होना चाहिए डेटा शामिल है. इस डेटा को सेव और वापस पाने का तरीका आपको तय करना है.

Android 10 (एपीआई लेवल 29) और उसके बाद के वर्शन वाले डिवाइसों पर, एपी लोकेशन डेटा इस रूप में दिखाया जाता है ResponderLocation ऑब्जेक्ट, जिनमें अक्षांश, देशांतर, और ऊंचाई शामिल हैं. उन वाई-फ़ाई आरटीटी एपी के लिए जो सहायता स्थान कॉन्फ़िगरेशन जानकारी/स्थान नागरिक रिपोर्ट (LCI/LCR डेटा), प्रोटोकॉल इस अवधि के दौरान एक ResponderLocation ऑब्जेक्ट दिखाएगा रेंज की प्रोसेस.

इस सुविधा की मदद से, ऐप्लिकेशन सीधे तौर पर APs से उनकी पोज़िशन के बारे में क्वेरी कर सकते हैं करने की ज़रूरत नहीं होगी. इस तरह, आपका ऐप्लिकेशन ये काम कर पाएगा APs को ढूंढने और उनकी पोज़िशन जानने का तरीका. भले ही, AP को पहले न पता हो. जैसे, जब कोई उपयोगकर्ता किसी नई इमारत में घुसता है.

ज़रूरी शर्तें

  • रेंज का अनुरोध करने वाले डिवाइस के हार्डवेयर को, 802.11-2016 FTM मानक.
  • रेंज का अनुरोध करने वाला डिवाइस, Android 9 (एपीआई लेवल) पर चल रहा होना चाहिए 28) या उससे बाद का वर्शन है.
  • रेंज का अनुरोध करने वाले डिवाइस में, जगह की जानकारी की सुविधा चालू होनी चाहिए और वाई-फ़ाई स्कैनिंग चालू हो जाए (सेटिंग > जगह की जानकारी के तहत).
  • अगर रेंज अनुरोध को टारगेट कर रहा ऐप्लिकेशन Android 13 (एपीआई लेवल 33) या उसके बाद वाला वर्शन, इसमें NEARBY_WIFI_DEVICES अनुमति. अगर ऐसा कोई ऐप्लिकेशन Android के पुराने वर्शन को टारगेट करता है, तो उसे उसके पास ACCESS_FINE_LOCATION तो अनुमति नहीं है.
  • अगर ऐप्लिकेशन दिख रहा है या वह यहां है, तो ऐप्लिकेशन को ऐक्सेस पॉइंट की रेंज के बारे में क्वेरी करनी होगी फ़ोरग्राउंड सेवा का इस्तेमाल किया जाता है. ऐप्लिकेशन बैकग्राउंड.
  • ऐक्सेस पॉइंट को आईईईई 802.11-2016 एफ़टीएम मानक लागू करना होगा.

सेटअप

अपने ऐप्लिकेशन को वाई-फ़ाई आरटीटी की सुविधा के लिए सेट अप करने के लिए, यहां दिया गया तरीका अपनाएं.

1. अनुमतियां मांगें

अपने ऐप्लिकेशन के मेनिफ़ेस्ट में इन अनुमतियों का अनुरोध करें:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- If your app targets Android 13 (API level 33)
     or higher, you must declare the NEARBY_WIFI_DEVICES permission. -->
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
                 <!-- If your app derives location information from Wi-Fi APIs,
                      don't include the "usesPermissionFlags" attribute. -->
                 android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
                 <!-- If any feature in your app relies on precise location
                      information, don't include the "maxSdkVersion"
                      attribute. -->
                 android:maxSdkVersion="32" />

NEARBY_WIFI_DEVICES और ACCESS_FINE_LOCATION की अनुमतियां खतरनाक हैं अनुमतियां दी हैं, ताकि जब भी उपयोगकर्ता चाहे, आपको रनटाइम पर उसके लिए अनुरोध करना पड़े आरटीटी स्कैन करें. आपके ऐप्लिकेशन को उपयोगकर्ता की जानकारी का अनुरोध करना होगा की अनुमति नहीं दी गई है. Reader Revenue Manager को सेट अप करने के बारे में रनटाइम अनुमतियों के बारे में जानने के लिए, ऐप्लिकेशन अनुमतियों का अनुरोध करें.

2. देखें कि डिवाइस पर वाई-फ़ाई आरटीटी की सुविधा काम करती है या नहीं

डिवाइस में वाई-फ़ाई आरटीटी की सुविधा है या नहीं, यह देखने के लिए पैकेज मैनेजर एपीआई:

Kotlin

context.packageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)

Java

context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WIFI_RTT);

3. देखें कि वाई-फ़ाई आरटीटी उपलब्ध है या नहीं

डिवाइस पर वाई-फ़ाई आरटीटी मौजूद हो सकता है. हालांकि, ऐसा हो सकता है कि यह अभी उपलब्ध न हो, क्योंकि उपयोगकर्ता ने वाई-फ़ाई बंद कर दिया है. उनके हार्डवेयर और फ़र्मवेयर के आधार पर कुछ डिवाइस में वाई-फ़ाई आरटीटी की सुविधा काम नहीं करती, तो हो सकता है कि सॉफ़्टएपी या टेदरिंग इस्तेमाल किया जा रहा है. यह देखने के लिए कि फ़िलहाल वाई-फ़ाई आरटीटी उपलब्ध है या नहीं, कॉल करें isAvailable().

वाई-फ़ाई आरटीटी की सुविधा, किसी भी समय बदल सकती है. आपके ऐप्लिकेशन को ब्रॉडकास्ट रिसीवर रिसीव करने के लिए ACTION_ Wifi_RTT_स्टेट_CHANGED, इसे तब भेजा जाता है, जब खरीदारी के लिए उपलब्धता में बदलाव होता है. आपके ऐप्लिकेशन को ब्रॉडकास्ट मिलने पर इंटेंट के हिसाब से, ऐप्लिकेशन को उपलब्धता की मौजूदा स्थिति की जांच करनी चाहिए और के हिसाब से व्यवहार करता है.

उदाहरण के लिए:

Kotlin

val filter = IntentFilter(WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED)
val myReceiver = object: BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if (wifiRttManager.isAvailable) {
            
        } else {
            
        }
    }
}
context.registerReceiver(myReceiver, filter)

Java

IntentFilter filter =
    new IntentFilter(WifiRttManager.ACTION_WIFI_RTT_STATE_CHANGED);
BroadcastReceiver myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (wifiRttManager.isAvailable()) {
            
        } else {
            
        }
    }
};
context.registerReceiver(myReceiver, filter);

ज़्यादा जानकारी के लिए, ब्रॉडकास्ट पढ़ें.

रेंज के लिए अनुरोध करें

रेंज से जुड़ा अनुरोध (RangingRequest) ने इसे बनाया है AP या वाई-फ़ाई अवेयर पीयर की सूची के तौर पर जिसमें किसी रेंज को शामिल किया गया हो का अनुरोध किया गया है. एक से ज़्यादा ऐक्सेस पॉइंट या वाई-फ़ाई अवेयर पीयर की जानकारी रेंज में आने वाला अनुरोध; सभी डिवाइसों की दूरियों को मापा जाता है और वापस कर दिया जाता है.

उदाहरण के लिए, कोई अनुरोध addAccessPoint() :

Kotlin

val req: RangingRequest = RangingRequest.Builder().run {
    addAccessPoint(ap1ScanResult)
    addAccessPoint(ap2ScanResult)
    build()
}

Java

RangingRequest.Builder builder = new RangingRequest.Builder();
builder.addAccessPoint(ap1ScanResult);
builder.addAccessPoint(ap2ScanResult);

RangingRequest req = builder.build();

पहुंच बिंदु की पहचान इसके Scanresult ऑब्जेक्ट जो यह हो सकता है कॉल करने पर मिला WifiManager.getScanresults(). Google Analytics 4 पर माइग्रेट करने के लिए, addAccessPoints(सूची) का इस्तेमाल करें.

इसी तरह, रेंज में किसी डिवाइस के MAC का इस्तेमाल करके, वाई-फ़ाई अवेयर पीयर को जोड़ा जा सकता है या उसका PeerHandle इस्तेमाल करें. यह addWifiAwarePeer(MacAddress पीयर) और addWifiAwarePeer(PeerHandle पीयर) विधियों का भी इस्तेमाल किया जा सकता है. वाई-फ़ाई अवेयर पीयर खोजने के बारे में ज़्यादा जानकारी के लिए, वाई-फ़ाई अवेयर दस्तावेज़ देखें.

अनुरोध की रेंज

कोई ऐप्लिकेशन, WifiRttManager.startRanging() और नीचे दी गई चीज़ें मुहैया कराना न भूलें: RangingRequest: ऑपरेशन, यह तय करने के लिए एक एक्ज़िकेटर कॉलबैक कॉन्टेक्स्ट, और RangingresultsCallback खोजें.

उदाहरण के लिए:

Kotlin

val mgr = context.getSystemService(Context.WIFI_RTT_RANGING_SERVICE) as WifiRttManager
val request: RangingRequest = myRequest
mgr.startRanging(request, executor, object : RangingResultCallback() {

    override fun onRangingResults(results: List<RangingResult>) {  }

    override fun onRangingFailure(code: Int) {  }
})

Java

WifiRttManager mgr =
      (WifiRttManager) Context.getSystemService(Context.WIFI_RTT_RANGING_SERVICE);

RangingRequest request ...;
mgr.startRanging(request, executor, new RangingResultCallback() {

  @Override
  public void onRangingFailure(int code) {  }

  @Override
  public void onRangingResults(List<RangingResult> results) {  }
});

रेंजिंग ऑपरेशन एसिंक्रोनस तरीके से किए जाते हैं और रेंज के नतीजे इसके कॉलबैक में से किसी एक में लौटाया जाता है RangingresultsCallback:

  • अगर पूरी रेंज ऑपरेशन सफल नहीं होता, onRangingFailure कॉलबैक यहां बताए गए स्टेटस कोड के साथ ट्रिगर होता है RangingresultsCallback. ऐसी गड़बड़ी तब हो सकती है, जब सेवा रेंज से जुड़ी कार्रवाई नहीं कर पाती समय पर--उदाहरण के लिए, क्योंकि वाई-फ़ाई अक्षम है, इसलिए ऐप्लिकेशन ने बहुत ज़्यादा रेंज ऑपरेशन का अनुरोध किया है और उसे थ्रॉटल कर दिया गया है या किसी वजह से अनुमति से जुड़ी समस्या है.
  • रेंजिंग ऑपरेशन पूरा होने के बाद, onRanging के नतीजे कॉलबैक को उन नतीजों की सूची के साथ ट्रिगर किया जाता है जो अनुरोध--हर अनुरोध के लिए एक नतीजा. नतीजों का क्रम ऐसा नहीं होता अनुरोधों के क्रम से मेल खाना चाहिए. ध्यान दें कि रेंज पूरा नहीं किया है, लेकिन फिर भी हर नतीजे से पता चलता है कि वह गड़बड़ी है और उन्हें मापा जा सकता है.

रेंज के नतीजों की व्याख्या करना

हर नतीजे को onRanging के नतीजे कॉलबैक को Rangingresults से तय किया जाता है ऑब्जेक्ट है. हर अनुरोध पर, ये काम करें.

1. अनुरोध की पहचान करें

हमने RangingRequest: आम तौर पर, ScanResult में दिया गया MAC पता होता है, जो ऐक्सेस की पहचान करता है अंक. MAC पते को getMacAddress() तरीका.

रेंज में उपलब्ध नतीजों की सूची, मिलते-जुलते ऐप्लिकेशन की तुलना में अलग-अलग हो सकती है (ऐक्सेस पॉइंट) सीमा में बताए गए हैं, इसलिए आपको MAC पते का इस्तेमाल करके मिलते-जुलते ऐप्लिकेशन की पहचान करें, न कि नतीजों के क्रम की.

2. यह पता लगाना कि हर एक मेज़रमेंट सही तरीके से हुआ या नहीं

यह पता लगाने के लिए कि मेज़रमेंट सही से हुआ है या नहीं, इसका इस्तेमाल करें getStatus() तरीका. इसके अलावा कोई भी अन्य मान STATUS_सफल गड़बड़ी दिखाता है. गड़बड़ी का मतलब है कि इस नतीजे के अन्य सभी फ़ील्ड (ऊपर दिए गए अनुरोध पहचान को छोड़कर) अमान्य हैं और get* तरीका इस वाक्य से काम नहीं करेगा: गैर-कानूनी स्टेट अपवाद अपवाद.

3. हर सही मेज़रमेंट के लिए नतीजे पाना

हर एक सफल मेज़रमेंट के लिए, संबंधित get तरीके:

वाई-फ़ाई आरटीटी की सुविधा वाले Android डिवाइस

यहां दी गई टेबल में कुछ फ़ोन, ऐक्सेस पॉइंट, और रीटेल, वेयरहाउसिंग, और डिस्ट्रिब्यूशन सेंटर डिवाइसों की सूची दी गई है जो वाई-फ़ाई-आरटीटी के साथ काम करते हैं. इनमें पूरी जानकारी शामिल नहीं है. हमारा सुझाव है कि आप हमसे संपर्क करें ताकि आरटीटी की सुविधा वाले अपने प्रॉडक्ट यहां लिस्ट किए जा सकें.

ऐक्सेस पॉइंट

निर्माता और मॉडल सहायता की तारीख
Nest Wifi Pro (वाई-फ़ाई 6E) इनकी अनुमति है
कंपलाब वाइल्ड एपी इनकी अनुमति है
Google वाई-फ़ाई इनकी अनुमति है
Google Nest का वाई-फ़ाई राऊटर इनकी अनुमति है
Google Nest वाई-फ़ाई पॉइंट इनकी अनुमति है
अरूबा AP-635 इनकी अनुमति है
सिस्को 9130 इनकी अनुमति है
सिस्को 9136 इनकी अनुमति है
सिस्को 9166 इनकी अनुमति है
सिस्को 9164 इनकी अनुमति है
अरूबा AP-505 इनकी अनुमति है
अरूबा एपी-515 इनकी अनुमति है
अरूबा AP-575 इनकी अनुमति है
अरूबा एपी-518 इनकी अनुमति है
अरूबा एपी-505एच इनकी अनुमति है
अरूबा AP-565 इनकी अनुमति है
अरूबा एपी-535 इनकी अनुमति है

फ़ोन

निर्माता और मॉडल Android वर्शन
Pixel 6 9 से ज़्यादा
Pixel 6 Pro 9 से ज़्यादा
Pixel 5 9 से ज़्यादा
Pixel 5a 9 से ज़्यादा
Pixel 5a (5G) 9 से ज़्यादा
Xiaomi Mi 10 Pro 9 से ज़्यादा
Xiaomi Mi 10 9 से ज़्यादा
Xiaomi Redmi Mi 9T Pro 9 से ज़्यादा
Xiaomi Mi 9T 9 से ज़्यादा
Xiaomi Mi 9 9 से ज़्यादा
Xiaomi Mi Note 10 9 से ज़्यादा
Xiaomi Mi Note 10 Lite 9 से ज़्यादा
Xiaomi Redmi Note 9S 9 से ज़्यादा
Xiaomi Redmi Note 9 Pro 9 से ज़्यादा
Xiaomi Redmi Note 8T 9 से ज़्यादा
Xiaomi Redmi Note 8 9 से ज़्यादा
Xiaomi Redmi K30 Pro 9 से ज़्यादा
Xiaomi Redmi K20 Pro 9 से ज़्यादा
Xiaomi Redmi के20 9 से ज़्यादा
Xiaomi Redmi Note 5 Pro 9 से ज़्यादा
Xiaomi Mi CC9 Pro 9 से ज़्यादा
LG G8X ThinQ 9 से ज़्यादा
LG V50S थिनक्यू 9 से ज़्यादा
LG V60 थिनक्यू 9 से ज़्यादा
LG V30 9 से ज़्यादा
Samsung Galaxy Note 10+ 5G 9 से ज़्यादा
Samsung Galaxy S20 और 5G 9 से ज़्यादा
Samsung Galaxy S20 और इसके बाद के वर्शन 9 से ज़्यादा
Samsung Galaxy S20 5G 9 से ज़्यादा
Samsung Galaxy S20 Ultra 5G 9 से ज़्यादा
Samsung Galaxy S20 9 से ज़्यादा
Samsung Galaxy Note 10 और उसके बाद के वर्शन 9 से ज़्यादा
Samsung Galaxy Note 10 5G 9 से ज़्यादा
Samsung Galaxy Note 10 9 से ज़्यादा
Samsung A9 Pro 9 से ज़्यादा
Google Pixel 4 XL 9 से ज़्यादा
Google Pixel 4 9 से ज़्यादा
Google Pixel 4a 9 से ज़्यादा
Google Pixel 3 XL 9 से ज़्यादा
Google Pixel 3 9 से ज़्यादा
Google Pixel 3a XL 9 से ज़्यादा
Google Pixel 3a 9 से ज़्यादा
Google Pixel 2 XL 9 से ज़्यादा
Google Pixel 2 9 से ज़्यादा
Google Pixel 1 XL 9 से ज़्यादा
Google Pixel 1 9 से ज़्यादा
पोको एक्स2 9 से ज़्यादा
शार्प ऐक्वोस R3 SH-04L 9 से ज़्यादा

रीटेल, वेयरहाउसिंग और डिस्ट्रिब्यूशन सेंटर से जुड़े डिवाइस

निर्माता और मॉडल Android वर्शन
ज़ीब्रा PS20 10.0 से ज़्यादा
ज़ेब्रा TC52/TC52HC 10.0 से ज़्यादा
ज़ीब्रा टीसी57 10.0 से ज़्यादा
ज़ीब्रा टीसी72 10.0 से ज़्यादा
ज़ीब्रा टीसी77 10.0 से ज़्यादा
ज़ेब्रा MC93 10.0 से ज़्यादा
ज़ीब्रा TC8300 10.0 से ज़्यादा
zebra VC8300 10.0 से ज़्यादा
ज़ीब्रा EC30 10.0 से ज़्यादा
ज़ीब्रा ET51 10.0 से ज़्यादा
ज़ीब्रा ET56 10.0 से ज़्यादा
ज़ीब्रा एल10 10.0 से ज़्यादा
ज़ेब्रा CC600/CC6000 10.0 से ज़्यादा
ज़ेब्रा MC3300x 10.0 से ज़्यादा
ज़ेब्रा MC330x 10.0 से ज़्यादा
ज़ीब्रा TC52x 10.0 से ज़्यादा
ज़ीब्रा TC57x 10.0 से ज़्यादा
zebra EC50 (LAN और HC) 10.0 से ज़्यादा
zebra EC55 (WAN) 10.0 से ज़्यादा
ज़ीब्रा WT6300 10.0 से ज़्यादा
स्कोर्पियो X5 10.0 से ज़्यादा