Медленно, чтобы получить позицию GPS после изменения фрагмента карты OSMDROID - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь создать приложение, которое позволяет мне просматривать различные события на карте, созданной с помощью OSMDROID, при первом доступе к карте я получаю положение GPS очень быстро, но после переключения на параметр на другой сторонеНавигационный ящик, который я реализовал, возвращаясь к карте, я заметил, что я получаю позицию из GPS очень медленно, это занимает даже более 15 секунд

Я попытался сбросить данные A-GPS с помощью команды: locationManager.sendExtraCommand ("gps," delete_aiding_data ", new Bundle ()) Но я не видел никаких улучшений, я также пытался внести различные изменения в функцию onPause, onResume, которая, как я считаю, является реальной проблемой, но безуспешно.У меня есть все разрешения для GPS и для архива в приложении

public class MapFragment extends Fragment implements LocationListener{
    static final int PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE = 1;
    private MapView map;
    private MyLocationNewOverlay mLocationOverlay = null;
    private CompassOverlay mCompassOverlay = null;
    private IMapController mapController = null;
    private LocationManager locationManager = null;
    private Location posizioneIniziale = null;
    private MapFragmentListener listener;

    ArrayList<Segnalazione> listReport;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        super.onCreate(savedInstanceState);
    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_map, container, false);
        map = (MapView) v.findViewById(R.id.map);
        return v;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Context ctx = getActivity().getApplicationContext();
        Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
        Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);

        if (ContextCompat.checkSelfPermission(getActivity(),
                Manifest.permission.WRITE_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED) {

            Log.v(TAG, "Permission is revoked");
            if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE)) {

            } else {

                ActivityCompat.requestPermissions(getActivity(),
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE);
            }
        }
        map.setTileSource(TileSourceFactory.MAPNIK);
        configMap(ctx);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof MapFragmentListener) {
            listener = (MapFragmentListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement MapFragmentListener");
        }
    }
    @Override
    public void onDetach() {
        super.onDetach();
        listener = null;
    }

    private void configMap(Context ctx) {
        map.setDestroyMode(false);
        map.setMultiTouchControls(true);
        map.setMinZoomLevel(17.0);
        map.setMaxZoomLevel(20.0);


        GpsMyLocationProvider provider = new GpsMyLocationProvider(ctx);
        provider.addLocationSource(LocationManager.PASSIVE_PROVIDER);
        provider.setLocationUpdateMinDistance(0);
        provider.setLocationUpdateMinTime(0);

        locationManager = (LocationManager) this.getActivity().getSystemService(Context.LOCATION_SERVICE);
        locationManager.sendExtraCommand("gps", "delete_aiding_data", new Bundle());


        mapController = map.getController();
        mLocationOverlay = new MyLocationNewOverlay(provider, map);
        mLocationOverlay.setDrawAccuracyEnabled(true);
        mLocationOverlay.enableMyLocation();
        mLocationOverlay.enableFollowLocation;
        Location lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        mapController.setZoom(17.0);
        mCompassOverlay = new CompassOverlay(ctx, new InternalCompassOrientationProvider(ctx), map);
        mCompassOverlay.enableCompass();
        map.getOverlays().add(this.mCompassOverlay);
        map.getOverlays().add(this.mLocationOverlay);

    }

    public void onResume(){
        super.onResume();
        Manager.getDefaultSharedPreferences(this);
        Log.d("RESUME","SONOINRESUME");
        map.onResume(); //needed for compass, my location overlays, v6.0.0 and up
    }

    public void onPause(){
        super.onPause();
        Log.d("PAUSA","SONOINPAUSA");
        locationManager.removeUpdates(this);
    }

    @Override
    public void onLocationChanged(Location location) {
        if(this.posizioneIniziale == null ){
            posizioneIniziale = location;
            listReport = getReportForMap(location.getLatitude(), location.getLongitude());
            for (Segnalazione obj : listReport) {
                getMarkerFromServer(obj);
            }
        }
    }

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

    }

    @Override
    public void onProviderEnabled(String s) {

    }

    @Override
    public void onProviderDisabled(String s) {

    }
}
...