यह उदाहरण दर्शाता है कि Android GPS, स्थान प्रबंधक तक कैसे पहुंचा जाए
चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजेक्ट पर जाएं और एक नया प्रोजेक्ट बनाने के लिए सभी आवश्यक विवरण भरें।
चरण 2 - निम्न कोड को res/layout/activity_main.xml में जोड़ें।
<बटन android:id="@+id/btn_stop_location_updates" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:enabled="false" android:onClick="stopLocationButtonClick" android:text="@string/stop_updates" />
चरण 3 - निम्न कोड को src/MainActivity.java
में जोड़ें <पूर्व>पैकेज app.com.sample;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.core.app.ActivityCompat;import android.Manifest;import android.annotation.SuppressLint;import android. app.Activity;import android.content.Intent;import android.content.IntentSender;import android.content.pm.PackageManager;import android.location.Location;import android.net.Uri;import android.os.Bundle;import android .os.Looper;import android.provider.Settings;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import com. google.android.gms.common.api.ApiException;import com.google.android.gms.common.api.ResolvableApiException;import com.google.android.gms.location.FusedLocationProviderClient;import com.google.android.gms.location .LocationCallback;import com.google.android.gms.location.LocationRequest;import com.google.android.gms.location.LocationResult;import com.google.android आयात करें .android.gms.location.SettingsClient;import com.google.android.gms.tasks.OnCompleteListener;import com.google.android.gms.tasks.OnFailureListener;import com.google.android.gms.tasks.OnSuccessListener;import com .google.android.gms.tasks.Task;import com.karumi.dexter.Dexter;import com.karumi.dexter.PermissionToken;import com.karumi.dexter.listener.PermissionDeniedResponse;import com.karumi.dexter.listener.PermissionGrantedResponse आयात करें =MainActivity.class.getSimpleName (); टेक्स्ट व्यू txtLocationResult; टेक्स्ट व्यू txtUpdatedOn; बटन btnStartUpdates; बटन btnStopUpdates; // स्थान अंतिम अद्यतन समय निजी स्ट्रिंग mLastUpdateTime; // स्थान अपडेट अंतराल - 10 सेकंड निजी स्थिर अंतिम लंबा UPDATE_INTERVAL_IN_MILLISECONDS =10000; // सबसे तेज़ अपडेट अंतराल - 5 सेकंड निजी स्थिर अंतिम int REQUEST_CHECK_SETTINGS =100; // स्थान से संबंधित एपिस का समूह निजी फ्यूज्डलोकेशनप्रोवाइडर क्लाइंट mFusedLocationClient; निजी सेटिंग्स क्लाइंट mSettingsClient; निजी स्थानअनुरोध निजी स्थानसेटिंग्सअनुरोध एमएललोकेशनसेटिंग्सअनुरोध; निजी स्थानकॉलबैक एमएललोकेशनकॉलबैक; निजी स्थान mCurrentLocation; // बूलियन ध्वज ui निजी बूलियन mRequestingLocationUpdates को चालू करने के लिए; @Override संरक्षित शून्य पर क्रिएट (बंडल सेव किया गया इंस्टेंसस्टेट) {super.onCreate (savedInstanceState); setContentView(R.layout.activity_main); // आवश्यक पुस्तकालयों को इनिशियलाइज़ करें init (); // सहेजे गए उदाहरण स्थिति से मूल्यों को पुनर्स्थापित करें } निजी शून्य init () { txtLocationResult =findViewById (R.id.location_result); txtUpdatedOn =findViewById (R.id.updated_on); btnStartUpdates =findViewById (R.id.btn_start_location_updates); btnStopUpdates =findViewById (R.id.btn_stop_location_updates); mFusedLocationClient =LocationServices.getFusedLocationProviderClient (यह); mSettingsClient =LocationServices.getSettingsClient(यह); mLocationCallback =नया स्थान कॉलबैक () {@Override सार्वजनिक शून्य onLocationResult(LocationResult locationResult) {super.onLocationResult(locationResult); // स्थान प्राप्त हुआ है mCurrentLocation =locationResult.getLastLocation (); mLastUpdateTime =DateFormat.getTimeInstance ()। प्रारूप (नई तिथि ()); अद्यतन स्थानयूआई (); } }; mRequestingLocationUpdates =झूठा; एमएललोकेशन रिक्वेस्ट =नया लोकेशन रिक्वेस्ट (); mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS); mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); LocationSettingsRequest.Builder निर्माता =नया स्थान सेटिंग्सRequest.Builder (); Builder.addLocationRequest (mLocationRequest); mLocationSettingsRequest =builder.build(); }/*** सहेजे गए इंस्टेंस स्थिति से मूल्यों को पुनर्स्थापित करना */निजी शून्य पुनर्स्थापना वैल्यूज़फ्रॉमबंडल (बंडल सहेजा गया इंस्टेंसस्टेट) {अगर (सहेजे गए इंस्टेंसस्टेट! =शून्य) { अगर (savedInstanceState.containsKey ("is_requesting_updates")) {_updatesLocationUpdates =saveInstanceState.getreolean ("_updatesLocationUpdates =saveInstanceState.getreolean" (" ); } अगर (savedInstanceState.containsKey("last_known_location")) {mCurrentLocation =saveInstanceState.getParcelable("last_known_location"); } अगर (savedInstanceState.containsKey("last_updated_on")) { mLastUpdateTime =saveInstanceState.getString ("last_updated_on"); } } अपडेटलोकेशनयूआई (); }/*** स्थान डेटा प्रदर्शित करने वाले UI को अपडेट करें* और बटनों को टॉगल करते हुए*/निजी शून्य अपडेटLocationUI() { if (mCurrentLocation !=null) { txtLocationResult.setText("Lat:" + mCurrentLocation.getLatitude() + ", " + "एलएनजी:" + mCurrentLocation.getLongitude ()); // TextView txtLocationResult.setAlpha (0) पर एक ब्लिंक एनीमेशन देना; txtLocationResult.animate().alpha(1).setDuration(300); // स्थान अंतिम अद्यतन समय txtUpdatedOn.setText ("पिछली बार अपडेट किया गया:" + mLastUpdateTime); } टॉगलबटन (); } @SaveInstanceState (बंडल आउटस्टेट) पर सार्वजनिक शून्य को ओवरराइड करें {super.onSaveInstanceState (आउटस्टेट); outState.putBoolean ("is_requesting_updates", mRequestingLocationUpdates); outState.putParcelable ("last_known_location", mCurrentLocation); outState.putString ("last_updated_on", mLastUpdateTime); } निजी शून्य टॉगलबटन () { अगर (mRequestingLocationUpdates) { btnStartUpdates.setEnabled (गलत); btnStopUpdates.setEnabled(true); } और { btnStartUpdates.setEnabled (सच); btnStopUpdates.setEnabled (झूठा); } }/*** स्थान अपडेट शुरू करना* जांचें कि क्या स्थान सेटिंग्स संतुष्ट हैं और फिर* स्थान अपडेट का अनुरोध किया जाएगा*/ निजी शून्य startLocationUpdates() {mSettingsClient .checkLocationSettings(mLocationSettingsRequest) .addOnSuccessListener(यह, नया OnSuccessListener() { @SuppressLint ("मिसिंग परमिशन") @ ऑवरराइड पब्लिक वॉयड ऑन सक्सेस (लोकेशनसेटिंग्स रिस्पॉन्स लोकेशनसेटिंग्स रिस्पॉन्स) { Log.i(TAG, "सभी लोकेशन सेटिंग्स संतुष्ट हैं।"); Toast.makeText(getApplicationContext(), "स्टार्ट लोकेशन अपडेट!", Toast.LENGTH_SHORT) .शो (); // गैर-निरीक्षण गुम अनुमति mFusedLocationClient.requestLocationUpdates (mLocationRequest, mLocationCallback, Looper.myLooper ()); updateLocationUI (); }})। ई) { int statusCode =((ApiException) e).getStatusCode (); स्विच (स्टेटसकोड) {केस लोकेशनसेटिंग्सस्टैटसकोड्स।RESOLUTION_REQUIRED:Log.i(TAG, "स्थान सेटिंग्स संतुष्ट नहीं हैं। अपग्रेड करने का प्रयास" + "स्थान सेटिंग्स"); कोशिश करें {// startResolutionForResult () को कॉल करके संवाद दिखाएं, और // परिणाम को onActivityResult () में जांचें। ResolvableApiException rae =(ResolvableApiException) e; rae.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS); } पकड़ें (IntentSender.SendIntentException sie) { Log.i(TAG, "PendingIntent अनुरोध निष्पादित करने में असमर्थ।"); } तोड़ना; केस लोकेशनसेटिंग्सस्टैटसकोड्स.SETTINGS_CHANGE_UNAVAILABLE:स्ट्रिंग एररमैसेज ="स्थान सेटिंग्स अपर्याप्त हैं, और" + "यहाँ तय नहीं की जा सकती हैं। सेटिंग्स में ठीक करें।"; लॉग.ई (टैग, त्रुटि संदेश); Toast.makeText (MainActivity.this, errorMessage, Toast.LENGTH_LONG)। शो (); } अपडेटलोकेशनयूआई (); } }); } सार्वजनिक शून्य startLocationButtonClick (दृश्य देखें) {// Dexter लाइब्रेरी Dexter.withActivity (यह) का उपयोग करके ACCESS_FINE_LOCATION का अनुरोध करना। साथ में अनुमति (Manifest.permission.ACCESS_FINE_LOCATION) .साथ लिस्टनर (नई अनुमति लिस्टनर () {@Override सार्वजनिक शून्य को PermissionGrantedResponse (PermissionGrantedRespons) पर ओवरराइड करें। =सच; startLocationUpdates (); } @Override सार्वजनिक शून्य onPermissionDenied(PermissionDeniedResponse response) { अगर (response.isPermanentlyDenied ()) {// खुली डिवाइस सेटिंग्स जब अनुमति है // स्थायी रूप से अस्वीकार कर दिया गया है सेटिंग्स (); }} @ सार्वजनिक शून्य को ओवरराइड करें onPermissionRationaleShouldBeShown(PermissionRequest अनुमति, PermissionToken टोकन) {Token.continuePermissionRequest(); }}).check(); } सार्वजनिक शून्य स्टॉपलोकेशनबटनक्लिक (दृश्य देखें) {mRequestingLocationUpdates =false; स्टॉपलोकेशन अपडेट (); } सार्वजनिक शून्य स्टॉपलोकेशनअपडेट्स () {// स्थान अपडेट को हटा रहा है अपडेट बंद हो गए!", टोस्ट।LENGTH_SHORT)। शो (); टॉगलबटन (); }}); } सार्वजनिक शून्य शोLastKnownLocation (दृश्य देखें) {अगर (mCurrentLocation!=null) { Toast.makeText(getApplicationContext(), "Lat:" + mCurrentLocation.getLatitude() + ", Lng:" + mCurrentLocation.getLongitude (), Toast. LENGTH_LONG)।दिखाएँ (); } और { Toast.makeText(getApplicationContext (), "अंतिम ज्ञात स्थान उपलब्ध नहीं है!", Toast.LENGTH_SHORT)। शो (); } } @Override संरक्षित शून्य onActivityResult(int requestCode, int resultCode, Intent data) {// पूर्णांक अनुरोध कोड की जांच करें जो मूल रूप से startResolutionForResult () को आपूर्ति की गई थी। अगर (अनुरोध कोड ==REQUEST_CHECK_SETTINGS) {स्विच (परिणाम कोड) {केस गतिविधि। // कुछ भी नहीं करना। startLocationupdates() को फिर से onResume में कॉल किया जाता है। तोड़ना; मामला गतिविधि.RESULT_CANCELED:Log.e(TAG, "उपयोगकर्ता ने आवश्यक स्थान सेटिंग परिवर्तन नहीं करना चुना है।"); mRequestingLocationUpdates =झूठा; तोड़ना; } } } निजी शून्य ओपनसेटिंग्स () {इरादा इरादा =नया इरादा (); इंटेंट.सेटएक्शन (सेटिंग्स.ACTION_APPLICATION_DETAILS_SETTINGS); उरी उरी =Uri.fromParts ("पैकेज", BuildConfig.APPLICATION_ID, अशक्त); इंटेंट.सेटडेटा (यूरी); इंटेंट.सेटफ्लैग्स (इरादा.FLAG_ACTIVITY_NEW_TASK); स्टार्टएक्टिविटी (इरादा); } @Resume पर सार्वजनिक शून्य को ओवरराइड करें () {super.onResume (); // बटन स्थिति और // अनुमत अनुमतियों के आधार पर स्थान अपडेट फिर से शुरू करना यदि (mRequestingLocationUpdates &&checkPermissions ()) { startLocationUpdates (); } अपडेटलोकेशनयूआई (); } निजी बूलियन checkPermissions() { int allowState =activityCompat.checkSelfPermission (यह, Manifest.permission.ACCESS_FINE_LOCATION); वापसी की अनुमतिस्टेट ==पैकेजमैनेजर.PERMISSION_GRANTED; } @Override संरक्षित शून्य पर रोकें () {super.onPause (); अगर (mRequestingLocationUpdates) {// स्थान अपडेट को रोकना स्टॉपलोकेशनअपडेट्स (); } } }पूर्व>चरण 4 - निम्न कोड को androidManifest.xml में जोड़ें
<उपयोग-अनुमति android:name="android.permission.ACCESS_FINE_LOCATION"/> <एप्लिकेशन android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android :roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <गतिविधि android:name=".MainActivity"> <इरादे-फ़िल्टर> <कार्रवाई android:name=" android.intent.action.MAIN" /> <श्रेणी android:name="android.intent.category.LAUNCHER" />
आइए आपके एप्लिकेशन को चलाने का प्रयास करते हैं। मुझे लगता है कि आपने अपने वास्तविक Android मोबाइल डिवाइस को अपने कंप्यूटर से कनेक्ट कर लिया है। एंड्रॉइड स्टूडियो से ऐप चलाने के लिए, अपने प्रोजेक्ट की गतिविधि फ़ाइलों में से एक खोलें और टूलबार से रन आइकन पर क्लिक करें। एक विकल्प के रूप में अपने मोबाइल डिवाइस का चयन करें और फिर अपने मोबाइल डिवाइस की जांच करें जो आपकी डिफ़ॉल्ट स्क्रीन प्रदर्शित करेगा -