我想获取我的当前位置,但是几分钟后它就可以工作了,请问有什么更快的方法吗?

时间:2019-06-26 13:55:15

标签: android google-maps google-location-services

我想在一个项目中获取“我的当前位置”,但是它在6或7分钟后可以工作,如何更快地获取当前位置? 我将ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATIONINTERNET放在了Android清单文件中,然后打开了设备位置信息,并检查了设置中的应用内权限。

这是我的代码

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener
{

    private GoogleMap mMap;

    String MarkerId1, MarkerId2;
    Marker MarkerMaqsad;
    int chk1 = -1, chk2 = -1;
    LocationManager locationManager;
    FloatingActionButton floatingActionButton;

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

        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

        floatingActionButton = findViewById(R.id.fab);


        floatingActionButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                if (CheckEnableGps())
                {
                    Get_User_Current_Location();
                }
                else
                {
                    Dialog_Enable_Provider dialog = new Dialog_Enable_Provider(MapsActivity.this);
                    dialog.show();
                }
            }
        });
    }


    boolean CheckEnableGps()
    {
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        boolean check = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
       if (check)
       {
           return true;
       }
       else return false;
    }

    @Override
    public void onMapReady(final GoogleMap googleMap)
    {
        mMap = googleMap;

      final   LatLng location = new LatLng(35.722840, 51.388394);

        MarkerOptions markerOptionFirst = new MarkerOptions().position(location)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.lcbig));

        final MarkerOptions markerOptionsSecound = new MarkerOptions().position(location)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.lc_maqbig));

        final Marker markerStart = mMap.addMarker(markerOptionFirst);

        MarkerId1 = markerStart.getId();

        Move_Camera(location);

        CircleOptions circleOptions = new CircleOptions();
        circleOptions.center(location);
        circleOptions.fillColor(Color.BLUE);
        circleOptions.strokeColor(Color.BLUE);
        circleOptions.radius(3.048);
        mMap.addCircle(circleOptions);

        mMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener()
        {
            @Override
            public void onCameraMove()
            {
                LatLng lng = googleMap.getCameraPosition().target;
                if (chk1 != 0)
                {
                    markerStart.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.lcsmal));
                    markerStart.setPosition(lng);
                } else
                {
                    if (MarkerMaqsad != null && chk2 != 0)
                    {
                        MarkerMaqsad.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.lc));
                        MarkerMaqsad.setPosition(lng);

                    }
                }
            }
        });

        mMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener()
        {
            @Override
            public void onCameraIdle()
            {
                if (chk1 != 0)
                {
                    markerStart.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.lcbig));
                } else
                {
                    MarkerMaqsad.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.lc_maqbig));
                }
            }
        });

        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
        {
            @Override
            public boolean onMarkerClick(Marker marker)
            {
                if (marker.getId().equals(MarkerId1))
                {
                    chk1 = 0;
                    MarkerMaqsad = mMap.addMarker(markerOptionsSecound);
                    MarkerMaqsad.setZIndex(1);
                    MarkerMaqsad.setPosition(marker.getPosition());
                    MarkerId2 = MarkerMaqsad.getId();
                }

                if (marker.getId().equals(MarkerId2))
                {
                    chk2 = 0;

                }
                return true;
            }
        });
    }

    private void Move_Camera(LatLng location)
    {
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(location, 15f));
    }
    void Get_User_Current_Location()
    {
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED)
        {
            return;
        }
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 5, this);
    }

    @Override
    protected void onResume()
    {
        try
        {
            if (CheckEnableGps())
            {
                Get_User_Current_Location();
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        super.onResume();
    }

    @Override
    public void onBackPressed()
    {
        if (chk2 == 0 || chk1 == 0)
        {
            chk1 = -1;
            chk2 = -1;
            MarkerMaqsad.remove();
        } else
        {
            super.onBackPressed();
        }
    }



    @Override
    public void onLocationChanged(Location location)
    {
        LatLng lng = new LatLng(location.getLatitude(), location.getLongitude());

        Move_Camera(lng);
    }

    @Override
    public void onStatusChanged(String s, int I, Bundle bundle)
    {

    }

    @Override
    public void onProviderEnabled(String s)
    {

    }

    @Override
    public void onProviderDisabled(String s)
    {

    }
}

请帮助我

0 个答案:

没有答案