Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 谷歌地图可以找到当前位置和附近的地方_Android_Google Maps - Fatal编程技术网

Android 谷歌地图可以找到当前位置和附近的地方

Android 谷歌地图可以找到当前位置和附近的地方,android,google-maps,Android,Google Maps,我想在我的Android应用程序中添加一个谷歌地图插件,以获取用户的当前位置并显示附近的医院。 如何获取当前位置和附近位置?有人能给我一个方向吗?按照以下步骤操作 用于熟悉 Android谷歌地图和这张地图用于 请参阅或此,获取当前位置 使用获取您所在位置附近的位置,有关位置Api的使用,请参见 使用在地图上显示带有API 2的气球覆盖的标记 在地图上两点之间画路线 请查看这些链接和以及此链接 请遵循以下代码,您将在附近的医院看到它正在工作。:) 您可以根据自己的意愿更改此类型,例如医院、咖啡馆

我想在我的Android应用程序中添加一个谷歌地图插件,以获取用户的当前位置并显示附近的医院。 如何获取当前位置和附近位置?有人能给我一个方向吗?

按照以下步骤操作

  • 用于熟悉 Android谷歌地图和这张地图用于

  • 请参阅或此获取当前位置

  • 使用获取您所在位置附近的位置,有关位置Api的使用,请参见

  • 使用在地图上显示带有API 2的气球覆盖的标记

  • 在地图上两点之间画路线 请查看这些链接以及此链接


  • 请遵循以下代码,您将在附近的医院看到它正在工作。:)

    您可以根据自己的意愿更改此类型,例如医院、咖啡馆、餐厅。。。。看看这一切是如何运作的:

        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;
            }
        }
    
    公共类MapsActivity扩展了AppCompatActivity在MapReadyCallback上的实现,
    位置侦听器{
    私有谷歌地图;
    地点经理地点经理;
    协调布局主要协调布局;
    字符串类型;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    如果(!isGooglePlayServicesAvailable()){
    回来
    }
    setContentView(R.layout.activity_映射);
    Intent=getIntent();
    Bundle=intent.getExtras();
    type=“医院”;
    SupportMapFragment mapFragment=(SupportMapFragment)getSupportFragmentManager()
    .findFragmentById(R.id.map);
    getMapAsync(这个);
    mainCoordinatorLayout=(CoordinatorLayout)findViewById(R.id.mainCoordinatorLayout);
    locationManager=(locationManager)getSystemService(位置服务);
    如果(!locationManager.isProviderEnabled(locationManager.GPS\U提供程序)){
    showLocationSettings();
    }
    }
    私有void showLocationSettings(){
    Snackbar Snackbar=Snackbar
    .make(主坐标布局,“位置错误:GPS禁用!”,
    蛇形条长度(长)
    .setAction(“启用”,新视图.OnClickListener(){
    @覆盖公共void onClick(视图v){
    startActivity(新意图(设置、动作、位置、来源、设置));
    }
    });
    snackbar.setActionTextColor(Color.RED);
    snackbar.setDuration(snackbar.LENGTH_不确定);
    View sbView=snackbar.getView();
    TextView TextView=(TextView)sbView
    .findviewbyd(android.support.design.R.id.snackbar\u text);
    textView.setTextColor(Color.YELLOW);
    snackbar.show();
    }
    @凌驾
    4月1日公开作废(谷歌地图谷歌地图){
    mMap=谷歌地图;
    if(ActivityCompat.checkSelfPermission(这个,android.Manifest.permission.ACCESS\u FINE\u位置)
    !=PackageManager.PERMISSION\u已授予和&ActivityCompat.checkSelfPermission(此,
    android.Manifest.permission.ACCESS\u\u位置)
    !=PackageManager.权限(已授予){
    回来
    }
    mMap.setMyLocationEnabled(真);
    mMap.getUiSettings().setCompassEnabled(true);
    mMap.getUiSettings().setZoomControlsEnabled(true);
    showCurrentLocation();
    }
    私有void showCurrentLocation(){
    标准=新标准();
    字符串bestProvider=locationManager.getBestProvider(条件为true);
    如果(ActivityCompat.checkSelfPermission)(此,
    android.Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予&&
    ActivityCompat.checkSelfPermission(这个,android.Manifest.permission.ACCESS\u位置)
    !=PackageManager.权限(已授予){
    回来
    }
    Location Location=locationManager.getLastKnownLocation(bestProvider);
    如果(位置!=null){
    onLocationChanged(位置);
    }
    locationManager.RequestLocationUpdate(最佳提供程序、最短时间、最短更新、,
    最小距离\u更改\u用于更新,此);
    }
    邻近位置的专用空心荷载(双纬度、双经度){
    StringBuilder Google PlaceSurl=
    新建StringBuilder(“https://maps.googleapis.com/maps/api/place/nearbysearch/json?");
    googlePlacesUrl.append(“location=”).append(纬度).append(“,”).append(经度);
    googlePlacesUrl.append(“&radius=”).append(邻近半径);
    googlePlacesUrl.append(“&types=”).append(type);
    googlePlacesUrl.append(&sensor=true);
    googlePlacesUrl.append(“&key=“+GOOGLE\u BROWSER\u API\u key”);
    JsonObjectRequest=新的JsonObjectRequest(googlePlacesUrl.toString(),
    新的Response.Listener(){
    @凌驾
    公共void onResponse(JSONObject结果){
    Log.i(标记,“onResponse:Result=“+Result.toString());
    parseLocationResult(结果);
    }
    },
    新的Response.ErrorListener(){
    @覆盖公共无效onErrorResponse(截击错误){
    Log.e(标记“onErrorResponse:Error=“+Error”);
    Log.e(标记为“一
    
    <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>