Android Academy · पाठ

उपयोगकर्ता का स्थान प्राप्त करना

फ़्यूज़्ड लोकेशन प्रोवाइडर की मूल बातें।

पाठ 2, कुल 4 में से13 चरण

उपयोगकर्ता का स्थान प्राप्त करना, CoddyKit पर Android Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Android Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Android Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

उपयोगकर्ता कहाँ है?

लोकेशन पर आधारित अधिकांश ऐप एक सवाल से शुरू होते हैं: इस समय डिवाइस कहाँ है? Android इसका उत्तर Google Play services के एक भाग, Fused Location Provider, के माध्यम से देता है।

इस पाठ में आप निर्भरता जोड़ेंगे, एक लोकेशन का अनुरोध करेंगे, लगातार अपडेट सुनेंगे और परिणाम Compose में दिखाएँगे।

Fused Provider क्यों?

Android में लोकेशन के कई स्रोत हैं: GPS, Wi-Fi और सेल टावर। Fused Location Provider इनका समझदारी से संयोजन करके कम से कम बैटरी खर्च में सबसे अच्छी लोकेशन देता है।

अब आप लगभग कभी भी सीधे LocationManager का उपयोग नहीं करते — fused client अधिक सरल और समझदार है।

// build.gradle.kts (module)
dependencies {
    implementation("com.google.android.gms:play-services-location:21.3.0")
}

अनुमति घोषित करना

लोकेशन एक संवेदनशील संसाधन है। अपनी AndroidManifest.xml में अनुमति घोषित करें। सटीक स्थिति के लिए ACCESS_FINE_LOCATION या अनुमानित स्थिति के लिए ACCESS_COARSE_LOCATION का उपयोग करें।

इसे घोषित करना केवल पहला चरण है — आपको रनटाइम पर भी इसका अनुरोध करना होगा (जिसे बाद के पाठ में समझाया गया है)।

<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

Fused Client बनाना

LocationServices से FusedLocationProviderClient प्राप्त करें। Compose में LocalContext.current से संदर्भ लें और client को याद रखें, ताकि हर पुनर्संयोजन पर वह दोबारा न बने।

import com.google.android.gms.location.LocationServices

@Composable
fun rememberFusedClient() = run {
    val context = LocalContext.current
    remember {
        LocationServices.getFusedLocationProviderClient(context)
    }
}

अंतिम ज्ञात लोकेशन प्राप्त करना

सबसे तेज़ उत्तर lastLocation है — सिस्टम द्वारा पहले से कैश की गई सबसे हाल की लोकेशन। यह एक Task लौटाता है, इसलिए सफलता श्रोता जोड़ें।

अगर हाल में किसी ऐप ने लोकेशन का अनुरोध नहीं किया हो, तो यह null हो सकता है; इसलिए हमेशा null की जाँच करें।

@SuppressLint("MissingPermission")
fun fetchLastLocation(
    client: FusedLocationProviderClient,
    onResult: (Location?) -> Unit
) {
    client.lastLocation
        .addOnSuccessListener { location -> onResult(location) }
        .addOnFailureListener { onResult(null) }
}

कॉरूटीन के साथ Task का await करना

कॉलबैक जल्दी ही एक-दूसरे के भीतर जुड़ते जाते हैं। kotlinx-coroutines-play-services लाइब्रेरी .await() जोड़ती है, जिससे आप साफ़ सस्पेंडिंग कोड के साथ लोकेशन पढ़ सकते हैं।

import kotlinx.coroutines.tasks.await

@SuppressLint("MissingPermission")
suspend fun currentLastLocation(
    client: FusedLocationProviderClient
): Location? {
    return client.lastLocation.await()
}

नई लोकेशन का अनुरोध करना

lastLocation पुरानी हो सकती है। नई लोकेशन पाने के लिए प्राथमिकता के साथ getCurrentLocation कॉल करें। PRIORITY_HIGH_ACCURACY GPS का उपयोग करता है; PRIORITY_BALANCED_POWER_ACCURACY बैटरी बचाता है।

import com.google.android.gms.location.Priority
import com.google.android.gms.location.CurrentLocationRequest

@SuppressLint("MissingPermission")
suspend fun freshLocation(
    client: FusedLocationProviderClient
): Location? {
    val request = CurrentLocationRequest.Builder()
        .setPriority(Priority.PRIORITY_HIGH_ACCURACY)
        .build()
    return client.getCurrentLocation(request, null).await()
}

लगातार लोकेशन अपडेट

नेविगेशन या ट्रैकिंग के लिए आपको अपडेट की एक धारा चाहिए। अंतराल के साथ LocationRequest बनाएँ, फिर requestLocationUpdates के माध्यम से LocationCallback पंजीकृत करें।

काम पूरा होने पर बैटरी बचाने के लिए अपडेट हमेशा बंद कर दें।

import com.google.android.gms.location.LocationRequest
import com.google.android.gms.location.LocationResult
import com.google.android.gms.location.LocationCallback

val request = LocationRequest.Builder(
    Priority.PRIORITY_HIGH_ACCURACY,
    5000L // 5 seconds
).build()

val callback = object : LocationCallback() {
    override fun onLocationResult(result: LocationResult) {
        result.lastLocation?.let { /* use it */ }
    }
}

Flow के रूप में अपडेट

एक साफ़ तरीका अपडेट को callbackFlow में लपेटता है, ताकि उपभोक्ता लोकेशन एकत्र कर सकें और awaitClose के माध्यम से संग्रह समाप्त होते ही अपडेट अपने-आप बंद हो जाएँ।

import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.callbackFlow

@SuppressLint("MissingPermission")
fun FusedLocationProviderClient.locationFlow(request: LocationRequest) = callbackFlow {
    val cb = object : LocationCallback() {
        override fun onLocationResult(result: LocationResult) {
            result.lastLocation?.let { trySend(it) }
        }
    }
    requestLocationUpdates(request, cb, Looper.getMainLooper())
    awaitClose { removeLocationUpdates(cb) }
}

Compose में लोकेशन दिखाना

एक बार की रीडिंग के लिए LaunchedEffect या अपडेट की धारा के लिए collectAsStateWithLifecycle का उपयोग करके कंपोज़ेबल में परिणाम एकत्र करें। फिर निर्देशांक दिखाएँ।

@Composable
fun LocationLabel(client: FusedLocationProviderClient) {
    var location by remember { mutableStateOf<Location?>(null) }
    LaunchedEffect(Unit) {
        location = freshLocation(client)
    }
    Text(
        location?.let { "Lat ${it.latitude}, Lng ${it.longitude}" }
            ?: "Locating..."
    )
}

बैटरी और सटीकता में संतुलन

मोबाइल ऐप में लोकेशन बैटरी की सबसे अधिक खपत करने वाली चीज़ों में से एक है। अपनी ज़रूरत पूरी करने वाली सबसे कम सटीकता चुनें, स्वीकार्य अपडेट अंतराल को सबसे लंबा रखें और स्क्रीन हट जाने पर अपडेट हमेशा बंद कर दें।

अधिक सटीकता और बार-बार अपडेट से बैटरी तेज़ी से खत्म होती है — इसे सक्रिय नेविगेशन के लिए बचाकर रखें।

त्वरित जाँच

आपको अभी, सस्पेंडिंग फ़ंक्शन का उपयोग करके, सबसे सटीक वर्तमान स्थिति चाहिए। कौन-सा तरीका सबसे उपयुक्त है?

पुनरावलोकन

अब आप डिवाइस की लोकेशन पढ़ सकते हैं:

  • play-services-location जोड़ें और ACCESS_FINE/COARSE_LOCATION घोषित करें।
  • LocationServices से FusedLocationProviderClient प्राप्त करें।
  • कैश की गई लोकेशन के लिए lastLocation और नई लोकेशन के लिए getCurrentLocation का उपयोग करें।
  • requestLocationUpdates / callbackFlow के माध्यम से अपडेट की धारा बनाएँ और बैटरी बचाने के लिए उन्हें बंद कर दें।

अगला विषय: उन निर्देशांकों पर मार्कर बनाना और कैमरा ले जाना।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Kotlin सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
36
पाठ
152

अक्सर पूछे जाने वाले प्रश्न

क्या “उपयोगकर्ता का स्थान प्राप्त करना” पाठ निःशुल्क है?

हाँ — Android Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “उपयोगकर्ता का स्थान प्राप्त करना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Android Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“उपयोगकर्ता का स्थान प्राप्त करना” में मैं क्या सीखूँगा?

फ़्यूज़्ड लोकेशन प्रोवाइडर की मूल बातें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Android Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Android Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Android Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“उपयोगकर्ता का स्थान प्राप्त करना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Android Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Android Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. मानचित्र दिखाना
  2. उपयोगकर्ता का स्थान प्राप्त करना
  3. मार्कर और कैमरा
  4. स्थान अनुमतियाँ सही ढंग से
← Android Academy पर वापस जाएँ