我想在我的Android应用中添加一个Google Maps插件,以获取用户的当前位置并显示附近的医院 . 如何获取当前位置和附近的地方?有人可以给我指点吗?
请按照以下代码,您将获得附近医院的工作 . :) . 您可以根据自己的意愿更改此类型,例如医院,咖啡馆,餐厅....并查看它是如何工作的
public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback, LocationListener { private GoogleMap mMap; LocationManager locationManager; CoordinatorLayout mainCoordinatorLayout; String type; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!isGooglePlayServicesAvailable()) { return; } setContentView(R.layout.activity_maps); Intent intent = getIntent(); Bundle bundle = intent.getExtras(); type="hospital"; SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); mainCoordinatorLayout = (CoordinatorLayout) findViewById(R.id.mainCoordinatorLayout); locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { showLocationSettings(); } } private void showLocationSettings() { Snackbar snackbar = Snackbar .make(mainCoordinatorLayout, "Location Error: GPS Disabled!", Snackbar.LENGTH_LONG) .setAction("Enable", new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } }); snackbar.setActionTextColor(Color.RED); snackbar.setDuration(Snackbar.LENGTH_INDEFINITE); View sbView = snackbar.getView(); TextView textView = (TextView) sbView .findViewById(android.support.design.R.id.snackbar_text); textView.setTextColor(Color.YELLOW); snackbar.show(); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } mMap.setMyLocationEnabled(true); mMap.getUiSettings().setCompassEnabled(true); mMap.getUiSettings().setZoomControlsEnabled(true); showCurrentLocation(); } private void showCurrentLocation() { Criteria criteria = new Criteria(); String bestProvider = locationManager.getBestProvider(criteria, true); if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } Location location = locationManager.getLastKnownLocation(bestProvider); if (location != null) { onLocationChanged(location); } locationManager.requestLocationUpdates(bestProvider, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this); } private void loadNearByPlaces(double latitude, double longitude) { StringBuilder googlePlacesUrl = new StringBuilder("https://maps.googleapis.com/maps/api/place/nearbysearch/json?"); googlePlacesUrl.append("location=").append(latitude).append(",").append(longitude); googlePlacesUrl.append("&radius=").append(PROXIMITY_RADIUS); googlePlacesUrl.append("&types=").append(type); googlePlacesUrl.append("&sensor=true"); googlePlacesUrl.append("&key=" + GOOGLE_BROWSER_API_KEY); JsonObjectRequest request = new JsonObjectRequest(googlePlacesUrl.toString(), new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject result) { Log.i(TAG, "onResponse: Result= " + result.toString()); parseLocationResult(result); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "onErrorResponse: Error= " + error); Log.e(TAG, "onErrorResponse: Error= " + error.getMessage()); } }); AppController.getInstance().addToRequestQueue(request); } private void parseLocationResult(JSONObject result) { String id, place_id, placeName = null, reference, icon, vicinity = null; double latitude, longitude; try { JSONArray jsonArray = result.getJSONArray("results"); if (result.getString(STATUS).equalsIgnoreCase(OK)) { mMap.clear(); for (int i = 0; i < jsonArray.length(); i++) { JSONObject place = jsonArray.getJSONObject(i); id = place.getString(SUPERMARKET_ID); place_id = place.getString(PLACE_ID); if (!place.isNull(NAME)) { placeName = place.getString(NAME); } if (!place.isNull(VICINITY)) { vicinity = place.getString(VICINITY); } latitude = place.getJSONObject(GEOMETRY).getJSONObject(LOCATION) .getDouble(LATITUDE); longitude = place.getJSONObject(GEOMETRY).getJSONObject(LOCATION) .getDouble(LONGITUDE); reference = place.getString(REFERENCE); icon = place.getString(ICON); MarkerOptions markerOptions = new MarkerOptions(); LatLng latLng = new LatLng(latitude, longitude); markerOptions.position(latLng); markerOptions.title(placeName + " : " + vicinity); mMap.addMarker(markerOptions); } Toast.makeText(getBaseContext(), jsonArray.length() + " Supermarkets found!", Toast.LENGTH_LONG).show(); } else if (result.getString(STATUS).equalsIgnoreCase(ZERO_RESULTS)) { Toast.makeText(getBaseContext(), "No Supermarket found in 5KM radius!!!", Toast.LENGTH_LONG).show(); } } catch (JSONException e) { e.printStackTrace(); Log.e(TAG, "parseLocationResult: Error=" + e.getMessage()); } } @Override public void onLocationChanged(Location location) { double latitude = location.getLatitude(); double longitude = location.getLongitude(); LatLng latLng = new LatLng(latitude, longitude); mMap.addMarker(new MarkerOptions().position(latLng).title("My Location")); mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); mMap.animateCamera(CameraUpdateFactory.zoomTo(15)); loadNearByPlaces(latitude, longitude); } @Override public void onStatusChanged(String s, int i, Bundle bundle) { } @Override public void onProviderEnabled(String s) { } @Override public void onProviderDisabled(String s) { } private boolean isGooglePlayServicesAvailable() { GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); int resultCode = apiAvailability.isGooglePlayServicesAvailable(this); if (resultCode != ConnectionResult.SUCCESS) { if (apiAvailability.isUserResolvableError(resultCode)) { apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST).show(); } else { Log.i(TAG, "This device is not supported."); finish(); } return false; } return true; } } Here is the xml file. <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> </FrameLayout>
它的工作在我身边 . 请添加api密钥并享受 . 希望这个帮助:)
请按照以下步骤操作
this tutorial 用于熟悉Android Google Map 和 API 2 .
请参阅 this answer 或此 another answer 并获取 API 2 以获取当前位置
使用 Google Place API 获取您所在位置附近的地点,并使用Place Api查看 this blog.
使用 this blog with source code 在 Map 上显示标记,并使用API 2进行气球覆盖 .
在 Map 上的两个点之间绘制路线在这些链接中查看 Link1 和 Link2 以及此Great Answer .
2 回答
请按照以下代码,您将获得附近医院的工作 . :) . 您可以根据自己的意愿更改此类型,例如医院,咖啡馆,餐厅....并查看它是如何工作的
它的工作在我身边 . 请添加api密钥并享受 . 希望这个帮助:)
请按照以下步骤操作
this tutorial 用于熟悉Android Google Map 和 API 2 .
请参阅 this answer 或此 another answer 并获取 API 2 以获取当前位置
使用 Google Place API 获取您所在位置附近的地点,并使用Place Api查看 this blog.
使用 this blog with source code 在 Map 上显示标记,并使用API 2进行气球覆盖 .
在 Map 上的两个点之间绘制路线在这些链接中查看 Link1 和 Link2 以及此Great Answer .