Intereting Posts
Не удалось инициализировать библиотеку рендеринга OpenGL Android. Есть ли способ получить платформу.pk8 и platform.x509.pem, с которой подписан rom? Интеграция представления Unity3d в действия Android Замена для Android Mapview для использования службы WMS Как сохранить андроид от инвертирования изображения с фронтальной камеры? Модернизация: как указать параметры, разделенные запятыми в запросе? Основы Xamarin. Ошибка сборки. Подробнее см. Журнал построения Как установить текущий текст прядильника без изменения соответствующих элементов списка выбора Как использовать аппаратное ускорение декодирования видео на Android? Как скрыть вкладку в макете вкладки Android? Почему идентификатор приложения Facebook внезапно стал недействительным? Kotlin.TypeCastException: null не может быть применено к ненулевому типу com.midsizemango.databasekotlin.Note Возможно использование drawable-mdpi-fr, drawable-hdpi-fr, drawable-ldpi-fr, для локализации с различными разрешениями Невозможно добавить дочернего узла, у которого нет узла CSS для узла без функции измерения Как изменить AOSP, чтобы разрешить определенным приложениям получать доступ root?

Получить текущее местоположение 0 в marshmallow, где ниже 23 API его дать точное текущее местоположение с использованием плавленого местоположения

Я получил текущее местоположение ниже 23 устройств, но получаю (0.0,0.0) широту и долготу в 23 эмулятор устройства.

EDIT В настоящее время я использую провайдера Fused Location для получения текущего местоположения

public class ContactUsFragment extends Fragment implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i("TAG", "OnCreate Called"); locationManager = (LocationManager) getActivity() .getSystemService(Context.LOCATION_SERVICE); buildGoogleApiClient(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, final Bundle savedInstanceState) { // Inflate the layout for this fragment view = inflater.inflate(R.layout.fragment_contact_us, container, false); Log.i("TAG", "OnCreateView Called"); setComponants(view); // **** Method For Set Componants Of Layout 

Это изображение карты по щелчку. Я хочу получить текущее местоположение и передать его в собственное приложение Google Map устройства для перехода к целевому местоположению.

  mapImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i("TAG", "On ImageView Click"); if (Build.VERSION.SDK_INT >= 23) { if (checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, getActivity().getApplicationContext(), getActivity())) { if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { navigateToGoogleMap(); } else { showSettingsAlert(); } } else { requestPermission(Manifest.permission.ACCESS_FINE_LOCATION, PERMISSION_REQUEST_CODE, getActivity().getApplicationContext(), getActivity()); } } else { if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { navigateToGoogleMap(); } else { showSettingsAlert(); } } } }); return view; } 

Ниже приведен код для получения текущего местоположения

 private synchronized void buildGoogleApiClient() { Log.i("TAG", "Building GoogleApiClient"); mGoogleApiClient = new GoogleApiClient.Builder(getActivity().getApplicationContext()) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); createLocationRequest(); } private void createLocationRequest() { mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(UPDATE_INTERVAL); mLocationRequest.setFastestInterval(FASTEST_INTERVAL); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); builder = new LocationSettingsRequest.Builder() .addLocationRequest(mLocationRequest); //************************** builder.setAlwaysShow(true); //this is the key ingredient //************************** } @Override public void onConnected(Bundle bundle) { Location mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); // Note that this can be NULL if last location isn't already known. if (mCurrentLocation != null) { // Print current location if not null Log.d("DEBUG", "current location: " + mCurrentLocation.toString()); currentlatitude = mCurrentLocation.getLatitude(); currentlongitude = mCurrentLocation.getLongitude(); } // Begin polling for new location updates. startLocationUpdates(); } private void startLocationUpdates() { LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); } private void stopLocationUpdates() { LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); } @Override public void onConnectionSuspended(int i) { if (i == CAUSE_SERVICE_DISCONNECTED) { Toast.makeText(getActivity().getApplicationContext(), "Disconnected. Please re-connect.", Toast.LENGTH_SHORT).show(); } else if (i == CAUSE_NETWORK_LOST) { Toast.makeText(getActivity().getApplicationContext(), "Network lost. Please re-connect.", Toast.LENGTH_SHORT).show(); } mGoogleApiClient.connect(); } @Override public void onLocationChanged(Location location) { String msg = "Updated Location: " + Double.toString(location.getLatitude()) + "," + Double.toString(location.getLongitude()); Toast.makeText(getActivity().getApplicationContext(), msg, Toast.LENGTH_SHORT).show(); currentlatitude = location.getLatitude(); currentlongitude = location.getLongitude(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { } 

* Этот код работает должным образом, когда я использую ниже устройства API23, но когда я пытаюсь подключить устройство marshmallow, оно дает текущее местоположение 0.0,0.0 *

Ниже представлен мой файл манифеста

  <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <!-- Required to show current location --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-library android:name="com.google.android.maps" /> <!-- Required OpenGL ES 2.0. for Maps V2 --> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".SplashActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@style/Theme.AppCompat.NoActionBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".HomeMainActivity" android:label="@string/app_name" android:windowSoftInputMode="adjustPan" android:screenOrientation="portrait" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@layout/searchable" /> </activity> <activity android:name=".HomeActivity" android:screenOrientation="portrait" /> <activity android:name=".DoctorsDetailsActivity" android:screenOrientation="portrait" /> <activity android:name=".ServiceActivity" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 

Solutions Collecting From Web of "Получить текущее местоположение 0 в marshmallow, где ниже 23 API его дать точное текущее местоположение с использованием плавленого местоположения"

Используйте ниже код. Надеюсь, это полезно.

Обязательно выполняйте этот код только на реальном устройстве.

activity_main.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment"/> </LinearLayout> 

MainActivity.java

 import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationManager; import android.os.Build; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.location.LocationListener; import com.google.android.gms.location.LocationRequest; import com.google.android.gms.location.LocationServices; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { GoogleMap mGoogleMap; SupportMapFragment mapFrag; LocationRequest mLocationRequest; GoogleApiClient mGoogleApiClient; Location mLastLocation; Marker mCurrLocationMarker; LocationManager locationManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { checkLocationPermission(); } else { if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { showGPSDisabledAlertToUser(); } } mapFrag = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFrag.getMapAsync(this); } private void showGPSDisabledAlertToUser() { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?") .setCancelable(false) .setPositiveButton("Settings", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Intent callGPSSettingIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(callGPSSettingIntent); mapFrag.getMapAsync(MainActivity.this); } }); alertDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = alertDialogBuilder.create(); alert.show(); } @Override public void onPause() { super.onPause(); //stop location updates when Activity is no longer active if (mGoogleApiClient != null) { LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); } } @Override public void onMapReady(GoogleMap googleMap) { mGoogleMap=googleMap; mGoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); //Initialize Google Play Services if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { buildGoogleApiClient(); mGoogleMap.setMyLocationEnabled(true); } } else { buildGoogleApiClient(); mGoogleMap.setMyLocationEnabled(true); } } protected synchronized void buildGoogleApiClient() { mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); mGoogleApiClient.connect(); } @Override public void onConnected(Bundle bundle) { mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(1000); mLocationRequest.setFastestInterval(1000); mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); } } @Override public void onConnectionSuspended(int i) {} @Override public void onConnectionFailed(ConnectionResult connectionResult) {} @Override public void onLocationChanged(Location location) { mLastLocation = location; if (mCurrLocationMarker != null) { mCurrLocationMarker.remove(); } //Place current location marker LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); MarkerOptions markerOptions = new MarkerOptions(); markerOptions.position(latLng); markerOptions.title("Current Position"); markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); mCurrLocationMarker = mGoogleMap.addMarker(markerOptions); //move map camera mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(11)); //stop location updates if (mGoogleApiClient != null) { LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); } } public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99; public boolean checkLocationPermission() { if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION)) { // Show an expanation to the user *asynchronously* -- don't block // this thread waiting for the user's response! After the user // sees the explanation, try again to request the permission. //Prompt the user once explanation has been shown ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION); } else { // No explanation needed, we can request the permission. ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_LOCATION); } return false; } else { if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { showGPSDisabledAlertToUser(); } return true; } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_LOCATION: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // permission was granted, yay! Do the // contacts-related task you need to do. if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { showGPSDisabledAlertToUser(); } if (mGoogleApiClient == null) { buildGoogleApiClient(); } mGoogleMap.setMyLocationEnabled(true); } } else { // permission denied, boo! Disable the // functionality that depends on this permission. Toast.makeText(this, "permission denied", Toast.LENGTH_LONG).show(); } return; } // other 'case' lines to check for other // permissions this app might request } } } 

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sneha.mymapdemo"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR API KEY"/> </application> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.INTERNET"/> </manifest> 

У меня возникла проблема после некоторой отладки и поиска

GoogleAPIclient onConnected () не вызывается, поэтому он вызывает метод onConnectionFailed ()

В этом методе я нашел код ошибки, это было 2, это означает ОБЯЗАТЕЛЬНОЕ ОБСЛУЖИВАНИЕ ОБРАБОТКИ ИГРОКА

Поэтому я меняю игровой сервис в файле gradle, такой же, как версия Device Playservice, поэтому я получаю текущее местоположение

Я размещаю некоторый код здесь:

 private synchronized void buildGoogleApiClient() { Log.i("TAG", "Building GoogleApiClient"); mGoogleApiClient = new GoogleApiClient.Builder(getActivity().getApplicationContext()) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); createLocationRequest();} private void createLocationRequest() { Log.i("TAG", "CreateLocationRequest"); mLocationRequest = new LocationRequest(); long UPDATE_INTERVAL = 10 * 1000; mLocationRequest.setInterval(UPDATE_INTERVAL); long FASTEST_INTERVAL = 10000; mLocationRequest.setFastestInterval(FASTEST_INTERVAL); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); builder = new LocationSettingsRequest.Builder() .addLocationRequest(mLocationRequest); //************************** builder.setAlwaysShow(true); //this is the key ingredient //************************** } private void startLocationUpdates() { Log.i("TAG", "StartLocationUpdates"); if (Build.VERSION.SDK_INT >= 23) { if (ContextCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); } } else { LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); } } private void stopLocationUpdates() { Log.i("TAG", "StopLocationUpdates"); LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); } @Override public void onConnectionSuspended(int i) { Log.i("TAG", "onConnectionSuspended"); if (i == CAUSE_SERVICE_DISCONNECTED) { Toast.makeText(getActivity().getApplicationContext(), "Disconnected. Please re-connect.", Toast.LENGTH_SHORT).show(); } else if (i == CAUSE_NETWORK_LOST) { Toast.makeText(getActivity().getApplicationContext(), "Network lost. Please re-connect.", Toast.LENGTH_SHORT).show(); } mGoogleApiClient.connect(); } @Override public void onLocationChanged(Location location) { Log.i("TAG", "OnLocationChanged"); Log.i("TAG", "Current Location==>" + location); currentlatitude = location.getLatitude(); currentlongitude = location.getLongitude(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { if (connectionResult.hasResolution()) { try { // Start an Activity that tries to resolve the error connectionResult.startResolutionForResult(getActivity(), connectionResult.RESOLUTION_REQUIRED); } catch (IntentSender.SendIntentException e) { e.printStackTrace(); } } else { Log.e("TAG", "Location services connection failed with code==>" + connectionResult.getErrorCode()); Log.e("TAG", "Location services connection failed Because of==> " + connectionResult.getErrorMessage()); } } @Override public void onDestroy() { super.onDestroy(); if (mGoogleApiClient != null) mGoogleApiClient.disconnect(); } @Override public void onConnected(Bundle bundle) { Location mCurrentLocation; Log.i("TAG", "OnConnected"); if (Build.VERSION.SDK_INT >= 23) { if (ContextCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(getActivity().getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); // Note that this can be NULL if last location isn't already known. if (mCurrentLocation != null) { // Print current location if not null Log.d("DEBUG", "current location: " + mCurrentLocation.toString()); currentlatitude = mCurrentLocation.getLatitude(); currentlongitude = mCurrentLocation.getLongitude(); } else { startLocationUpdates(); } } } else { mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); // Note that this can be NULL if last location isn't already known. if (mCurrentLocation != null) { // Print current location if not null Log.d("DEBUG", "current location: " + mCurrentLocation.toString()); currentlatitude = mCurrentLocation.getLatitude(); currentlongitude = mCurrentLocation.getLongitude(); } // Begin polling for new location updates. startLocationUpdates(); } } 

Подробнее см. Официальные документы https://developers.google.com/android/guides/setup

Добавьте это разрешение в свой androidmanifest.xml

Затем перейдите в настройку —–> Приложения —–> Ваше приложение —> Разрешение на предоставление разрешения

 <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION"/> 

Вы также можете добавить разрешения времени выполнения. http://developer.android.com/intl/es/training/permissions/requesting.html

GPSTacker.java

 import android.Manifest; import android.annotation.TargetApi; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.provider.Settings; import android.util.Log; import java.security.Provider; public class GPSTracker extends Activity implements LocationListener { private final Context mContext; // flag for GPS status boolean isGPSEnabled = false; // flag for network status boolean isNetworkEnabled = false; // flag for GPS status boolean canGetLocation = false; Location location; // location double latitude; // latitude double longitude; // longitude // The minimum distance to change Updates in meters private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters // The minimum time between updates in milliseconds private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute // Declaring a Location Manager protected LocationManager locationManager; public GPSTracker(Context context) { this.mContext = context; getLocation(); } public Location getLocation() { try { locationManager = (LocationManager) mContext .getSystemService(LOCATION_SERVICE); // getting GPS status isGPSEnabled = locationManager .isProviderEnabled(LocationManager.GPS_PROVIDER); // getting network status isNetworkEnabled = locationManager .isProviderEnabled(LocationManager.NETWORK_PROVIDER); if (!isGPSEnabled && !isNetworkEnabled) { // no network provider is enabled } else { this.canGetLocation = true; if (isNetworkEnabled) { locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("Network", "Network"); if (locationManager != null) { location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } } // if GPS Enabled get lat/long using GPS Services if (isGPSEnabled) { if (location == null) { locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); Log.d("GPS Enabled", "GPS Enabled"); if (locationManager != null) { location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); if (location != null) { latitude = location.getLatitude(); longitude = location.getLongitude(); } } } } } } catch (Exception e) { e.printStackTrace(); } return location; } /** * Stop using GPS listener * Calling this function will stop using GPS in your app */ @TargetApi(Build.VERSION_CODES.M) public void stopUsingGPS() { if (locationManager != null) { if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // public void requestPermissions(@NonNull String[] permissions, int requestCode) // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for Activity#requestPermissions for more details. return; } locationManager.removeUpdates(GPSTracker.this); } } /** * Function to get latitude */ public double getLatitude() { if (location != null) { latitude = location.getLatitude(); } // return latitude return latitude; } /** * Function to get longitude */ public double getLongitude() { if (location != null) { longitude = location.getLongitude(); } // return longitude return longitude; } /** * Function to check GPS/wifi enabled * * @return boolean */ public boolean canGetLocation() { return this.canGetLocation; } /** * Function to show settings alert dialog * On pressing Settings button will lauch Settings Options */ public void showSettingsAlert() { AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); // Setting Dialog Title alertDialog.setTitle("GPS is settings"); // Setting Dialog Message alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); // On pressing Settings button alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); mContext.startActivity(intent); } }); // on pressing cancel button alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); // Showing Alert Message alertDialog.show(); } @Override public void onLocationChanged(Location currentLocation) { // TODO Auto-generated method stub this.location = currentLocation; getLatitude(); getLongitude(); } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } } 

DirectionsJSONParser.java

 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.google.android.gms.maps.model.LatLng; public class DirectionsJSONParser { /** Receives a JSONObject and returns a list of lists containing latitude and longitude */ public List<List<HashMap<String,String>>> parse(JSONObject jObject){ List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String,String>>>() ; JSONArray jRoutes = null; JSONArray jLegs = null; JSONArray jSteps = null; try { jRoutes = jObject.getJSONArray("routes"); /** Traversing all routes */ for(int i=0;i<jRoutes.length();i++){ jLegs = ( (JSONObject)jRoutes.get(i)).getJSONArray("legs"); List path = new ArrayList<HashMap<String, String>>(); /** Traversing all legs */ for(int j=0;j<jLegs.length();j++){ jSteps = ( (JSONObject)jLegs.get(j)).getJSONArray("steps"); /** Traversing all steps */ for(int k=0;k<jSteps.length();k++){ String polyline = ""; polyline = (String)((JSONObject)((JSONObject)jSteps.get(k)).get("polyline")).get("points"); List<LatLng> list = decodePoly(polyline); /** Traversing all points */ for(int l=0;l<list.size();l++){ HashMap<String, String> hm = new HashMap<String, String>(); hm.put("lat", Double.toString(((LatLng)list.get(l)).latitude) ); hm.put("lng", Double.toString(((LatLng)list.get(l)).longitude) ); path.add(hm); } } routes.add(path); } } } catch (JSONException e) { e.printStackTrace(); }catch (Exception e){ } return routes; } /** * Method to decode polyline points * Courtesy : http://jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java * */ private List<LatLng> decodePoly(String encoded) { List<LatLng> poly = new ArrayList<LatLng>(); int index = 0, len = encoded.length(); int lat = 0, lng = 0; while (index < len) { int b, shift = 0, result = 0; do { b = encoded.charAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lat += dlat; shift = 0; result = 0; do { b = encoded.charAt(index++) - 63; result |= (b & 0x1f) << shift; shift += 5; } while (b >= 0x20); int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); lng += dlng; LatLng p = new LatLng((((double) lat / 1E5)), (((double) lng / 1E5))); poly.add(p); } return poly; } } 

Теперь, когда вы хотите указать свое местоположение в Activity, добавьте это

  // create class object gps = new GPSTracker(ImageUpload.this); // check if GPS enabled if (gps.canGetLocation()) { double latitude = gps.getLatitude(); double longitude = gps.getLongitude(); tv.setText("Latitude:" + latitude + ", Longitude:" + longitude); } else { // can't get location // GPS or Network is not enabled // Ask user to enable GPS/network in settings gps.showSettingsAlert(); }