मैं Google क्लाउड प्लेटफ़ॉर्म से प्राप्त Google मानचित्र API कुंजी का उपयोग करके Android Studio में अपना वर्तमान स्थान प्राप्त करने का प्रयास कर रहा हूं। अगर मैं अपने फोन पर ऐप चलाता हूं, तो सब कुछ ठीक है। यदि मैं एमुलेटर पर ऐप चलाता हूं, तो मेरा स्थान Google प्लेक्स प्रतीत होता है, जैसा कि निम्न छवि में है (जो पूरी तरह से गलत होगा): गलत स्थान दिखाने वाला एमुलेटर ऐप

मुझे यकीन नहीं है कि यह एपीआई कुंजी के कारण है या शायद कोड/अनुमति/जीपीएस में कोई गलती है? मैंने एक ट्यूटोरियल से कोड लिया, लेकिन अब ऐसा लगता है कि Google क्लाइंट को अब बहिष्कृत कर दिया गया है (सुनिश्चित नहीं है कि यह समस्या है)। मेरा मानना ​​है कि यह एमुलेटर की वजह से है, लेकिन मुझे नहीं पता क्यों। मैं वर्तमान में पिक्सेल 2 एपीआई 26 का उपयोग कर रहा हूं।

मैं यहां कोड दिखाऊंगा:

  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="com.google.android.providers.gsf.permisson.READ_GSERVICES"/>
<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_maps_key" />

बिल्ड.ग्रेड:

implementation 'com.google.android.gms:play-services-maps:17.0.1'
implementation 'com.google.android.gms:play-services-location:18.0.0'

मानचित्र गतिविधि:

public class GoogleMapsActivity extends FragmentActivity implements OnMapReadyCallback,
    GoogleApiClient.ConnectionCallbacks,
    GoogleApiClient.OnConnectionFailedListener,
    LocationListener {

private GoogleMap mMap;
private GoogleApiClient googleClient;
private LocationRequest locationRequest;
private Location ultimateLocation;
private Marker markerCurrentLocation;
private static final int Request_User_Location_Code = 90;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_google_maps);

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
    {
        checkLocationPermission();
    }

    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    assert mapFragment != null;
    mapFragment.getMapAsync(this);

}

@Override
public void onMapReady(@NotNull GoogleMap googleMap) {
    mMap = googleMap;
    //current location
    if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED){
        createGoogleApiClient();
        mMap.setMyLocationEnabled(true);
    }


}

protected synchronized void createGoogleApiClient() { // ok
    googleClient = new GoogleApiClient.Builder(this)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .addApi(LocationServices.API)
            .build();
    googleClient.connect();

}

@Override
public void onLocationChanged(@NonNull Location location) { // ok
    ultimateLocation = location;
    if (markerCurrentLocation !=null)
    {
        markerCurrentLocation.remove();;
    }
    LatLng coordinates = new LatLng(location.getLatitude(), location.getLongitude());
    MarkerOptions markerOptions = new MarkerOptions();
    markerOptions.position(coordinates);
    markerOptions.title("Current Location");
    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));

    markerCurrentLocation = mMap.addMarker(markerOptions);
    mMap.moveCamera(CameraUpdateFactory.newLatLng(coordinates));
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 17.0f));

    if(googleClient!=null)
    {
        LocationServices.FusedLocationApi.removeLocationUpdates(googleClient,this);
    }
    else
    {
        Toast.makeText(this, "NULLLLLLLL", Toast.LENGTH_SHORT).show();
    }

}


@Override
public void onConnected(@Nullable Bundle bundle) { // ok
    locationRequest = new LocationRequest();
    locationRequest.setInterval(1100);
    locationRequest.setFastestInterval(1100);
    locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
        LocationServices.FusedLocationApi.requestLocationUpdates(googleClient, locationRequest, this);
    }
}

public boolean checkLocationPermission(){ // ok
    boolean ret;
    if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){
        if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.ACCESS_FINE_LOCATION))
        {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, Request_User_Location_Code);
        }
        else
        {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, Request_User_Location_Code);

        }
        ret = false;
    }
    else
    {
        ret = true;
    }
    return ret;
}
//ok
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode)
    {
        case Request_User_Location_Code:
            if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
            {
                if(ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)== PackageManager.PERMISSION_GRANTED)
                {
                    if(googleClient==null)
                    {
                        createGoogleApiClient();;
                    }
                    mMap.setMyLocationEnabled(true);
                }
            }
            else
            {
                Toast.makeText(this, " PERMISSION DENIED", Toast.LENGTH_SHORT).show();
            }
            return ;
    }
}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

}

}

0
Patricia Badea 17 मई 2021, 21:31

1 उत्तर

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

बस एम्यूलेटर कंट्रोल्स (थ्री डॉट्स मेन्यू) पर जाएं और Location टैब में, मैप में किसी भी लोकेशन को पिन करें और Set Location पर क्लिक करें।

फिर सत्यापित करें कि क्या आपको वह स्थान प्राप्त हुआ है जिसकी आप अपने ऐप में अपेक्षा कर रहे थे।

0
Eddie Lopez 17 मई 2021, 22:31
मैं अपने वर्तमान स्थान को लाइव अपडेट के साथ प्राप्त करने का प्रयास कर रहा हूं। मेरे पास एक कोड है और यह एंड्रॉइड डिवाइस के लिए काम करता है, लेकिन एमुलेटर के लिए नहीं और मेरा सवाल यह था कि क्या यह एमुलेटर की समस्या है। शायद एम्यूलेटर में कोई जीपीएस फ़ंक्शन या कुछ भी नहीं है?
 – 
Patricia Badea
23 मई 2021, 10:55
एमुलेटर में जीपीएस हार्डवेयर नहीं होगा, हालांकि इसमें सभी एपीआई और कार्यक्षमता होगी और आप जो भी स्थान चाहते हैं उसे वापस कर देंगे। हालांकि यह आपका वर्तमान स्थान नहीं लौटाएगा, लेकिन आप सेटिंग के माध्यम से स्थान सेट कर सकते हैं और बाद में उन्हें अपने ऐप में सत्यापित कर सकते हैं।
 – 
Eddie Lopez
24 मई 2021, 16:56