有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在安卓中获取谷歌地图蓝点纬度和经度

我的目标是跟踪用户的位置,并在到达标记位置时发出警报。所以首先我得到了要到达的位置并做了标记。然后我得到当前位置,并将其与标记的位置进行比较。但它不起作用。就连我都把记号笔放在了现在的位置。它不是在传递祝酒词。这是密码-

public class MainActivity extends FragmentActivity implements LocationListener{
    LocationManager locationManager;
    String provider;
    ToggleButton toggle;

    public static double lat,lang,value1,value2,value3,value4;
    public static String strlat,strlat1;
    public LatLng loc,loc1;
    public  double latitude,longitude; 
    public static String strlang,strlang1 ;
    Location location;

    public LocationManager locationmanager;
        // Google Map
            private GoogleMap googleMap;
            LocationListener Locationlistener;

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

                locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);        

                // Creating an empty criteria object
                Criteria criteria = new Criteria();

                // Getting the name of the provider that meets the criteria
                provider = locationManager.getBestProvider(criteria, false);

               if(provider!=null && !provider.equals("")){

                    // Get the location from the given provider 
                    final Location location = locationManager.getLastKnownLocation(provider);

                    locationManager.requestLocationUpdates(provider, 1000, 1, this);

                    final Handler handler = new Handler();

                    Runnable runnable = new Runnable() {

                        public void run() {
                            if(location!=null){
                                lat = location.getLatitude();
                            lang = location.getLongitude();

                             value3 =Double.parseDouble(new DecimalFormat("##.##").format(lat));
                             value4 =Double.parseDouble(new DecimalFormat("##.##").format(lang));
                             strlat = String.valueOf(value3);
                                strlang = String.valueOf(value4);
                             loc1 =new LatLng(lat, lang);
                            if((value1 == value3) && (value2 == value4))
                            {
                                Toast.makeText(getApplicationContext(), "target reached", Toast.LENGTH_SHORT).show();
                            }
                            else
                                Toast.makeText(getBaseContext(), "Location can't be retrieved", Toast.LENGTH_SHORT).show();

                        }
                            else{
                            Toast.makeText(getBaseContext(), "No Provider Found", Toast.LENGTH_SHORT).show();
                        }
                            handler.postDelayed(this, 1000);
                        }
                    };

                    handler.post(runnable);
               }

                try {
                    // Loading map
                    initilizeMap();

                    // Changing map type
                    googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                    // googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
                    // googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
                    // googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
                    // googleMap.setMapType(GoogleMap.MAP_TYPE_NONE);

                    // Showing / hiding your current location

                googleMap.setMyLocationEnabled(true);

                    // Enable / Disable zooming controls
                    googleMap.getUiSettings().setZoomControlsEnabled(false);

                    // Enable / Disable my location button
                    googleMap.getUiSettings().setMyLocationButtonEnabled(true);

                    // Enable / Disable Compass icon
                    googleMap.getUiSettings().setCompassEnabled(true);

                    // Enable / Disable Rotate gesture
                    googleMap.getUiSettings().setRotateGesturesEnabled(true);

                    // Enable / Disable zooming functionality
                    googleMap.getUiSettings().setZoomGesturesEnabled(true);

                    // create marker
                googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f));

                } catch (Exception e) {
                    e.printStackTrace();
                }

                googleMap.setOnMapClickListener(new OnMapClickListener(){
                    public void onMapClick(LatLng point){
                        Toast.makeText(getBaseContext(),
                            point.latitude + ", " + point.longitude,
                            Toast.LENGTH_LONG).show();
                        latitude = point.latitude;
                        longitude = point.longitude;
                        value1 =Double.parseDouble(new DecimalFormat("##.##").format(latitude));
                        value2 =Double.parseDouble(new DecimalFormat("##.##").format(longitude));
                        strlat1 = String.valueOf(value1);
                        strlang1 = String.valueOf(value2);
                        loc=new LatLng(point.latitude, point.longitude);
                        MarkerOptions marker = new MarkerOptions().position(loc).title("Hello Maps ");

                        // adding marker
                        googleMap.addMarker(marker);

                    }
                });
            }

            @Override
            protected void onResume() {
                super.onResume();
                initilizeMap();
            }

            /**
             * function to load map If map is not created it will create it for you
             * */
            private void initilizeMap() {
                if (googleMap == null) {
                    googleMap = ((MapFragment) getFragmentManager().findFragmentById(
                            R.id.map)).getMap();

                    // check if map is created successfully or not
                    if (googleMap == null) {
                        Toast.makeText(getApplicationContext(),
                                "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                                .show();
                    }
                }
            }

            /*
             * creating random position around a location for testing purpose only
             */

            @Override
            public void onLocationChanged(Location location) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub

            }
    }

共 (2) 个答案

  1. # 1 楼答案

    您的代码中有一些错误

    您无法将坐标与==进行比较,因为在跟踪设备位置时,您将永远无法精确匹配lat/lon坐标。你需要计算一个阈值,如果设备在该阈值内,则显示警报

    接下来,你没有使用onLocationChanged()回调,所以你只是在应用启动时查看一下当前位置

    看看my other answer here中的代码,它是关于确定设备是否在一个圆内。这是一个类似的问题

    这样,如果你要使你的阈值达到10米,并且考虑到如果目标在10米以内的目标,你就可以实现你的^ {< CD2>}方法:这样的事情:

    @Override
    public void onLocationChanged(Location location) {
    
        float[] distance = new float[2];
    
        Location.distanceBetween( location.getLatitude(), location.getLongitude(),
                latitude, longitude, distance);
    
        if( distance[0] < 10 ){
            //target location reached
            Toast.makeText(getApplicationContext(), "target reached", Toast.LENGTH_SHORT).show();
        }
    }
    
  2. # 2 楼答案

    再来一个丹尼尔。我改变了上面的代码,现在它正在工作,现在有一些更多的问题

    一,。我试着像第二次那样设置闪屏。班我为谷歌地图设置了上面的代码。它在从一个移动到另一个的过程中运行了五秒钟,但它停了下来

                new Timer().schedule(new TimerTask(){
                    public void run() { 
                        Intent intent =  new Intent (MainActivity.this, SecondActivity.class);
                        PendingIntent pendIntent = PendingIntent.getActivity(getBaseContext(), 1000, intent, 0);
                    }
                }, 5000);
    

    二,。我想在谷歌地图上设置搜索如何设置,我试着让它不起作用给出一些想法