Problema GPS en Android

Iniciado por Hackmundy, Octubre 22, 2017, 07:26:37 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Hola como esta, he estado aprendiendo android, pero he dado vuelta por toda la red y no encuentro solucion, lo que pasa es que no me actualiza las cordenadas GPS no entra la LocationListener nunca, aparte aveces se cierra la apk. No se que pueda ser ya hice de todo.


Código: php

package com.taxi.taxista;

import android.Manifest;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.SystemClock;
import android.provider.Settings;


import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;

import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.TabHost;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

import Conexion.ConexionHTTP;

public class CordenadasMaps extends FragmentActivity implements OnMapReadyCallback, LocationListener {

    private GoogleMap mMap;
    private Marker marcador;
    private LocationManager locationManager;
    //private LocationListener locationListener;
    private double latitud;
    private double longitud;
    private Chronometer reloj;

    private short FlagThear = 0, PrimeraVez = 0;
    private long TIME_HILO = 3000;
    private Button Activ, Desact;
    private String ID;
    AlertDialog alert = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cordenadas_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);


        Resources res = getResources();
        TabHost tabs = (TabHost) findViewById(android.R.id.tabhost);
        tabs.setup();

        TabHost.TabSpec spec = tabs.newTabSpec("mitab1");
        spec.setContent(R.id.tab1);
        spec.setIndicator("",
                res.getDrawable(R.drawable.mapa));
        tabs.addTab(spec);

        spec = tabs.newTabSpec("mitab2");
        spec.setContent(R.id.tab2);
        spec.setIndicator("",
                res.getDrawable(R.drawable.taximetro));
        tabs.addTab(spec);

        spec = tabs.newTabSpec("mitab3");
        spec.setContent(R.id.tab3);
        spec.setIndicator("",
                res.getDrawable(android.R.drawable.ic_delete));
        tabs.addTab(spec);

        tabs.setCurrentTab(0);
        Activ = (Button) findViewById(R.id.btn_activar);
        Desact = (Button) findViewById(R.id.btn_desactivar);
        Bundle datos = getIntent().getExtras();
        ID = datos.getString("ID");
        //hilo();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
        //super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 10:
                VerificaPermiso();
                break;
            default:
                break;
        }
    }

    public void VerificaPermiso() {

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.INTERNET}, 10);
            }
            System.out.println("ENTRO AQUI");
            return;
        }
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        String provider = locationManager.getBestProvider(criteria, true);
        System.out.println("provider" + provider);
        if (provider != null) {
            locationManager.requestLocationUpdates(provider, 0, 0, CordenadasMaps.this);
        }
    }

    public void setLatLon(double longitud, double latitud) {
        this.longitud = longitud;
        this.latitud = latitud;
        System.out.println("1  " + this.longitud);
        System.out.println("1 " + this.latitud);
    }


    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        System.out.println("1");
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);


        mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
            @Override
            public void onMapLongClick(LatLng latLng) {
                mMap.addMarker(new MarkerOptions()
                        //.icon(BitmapDescriptorFactory.fromResource())
                        .position(latLng));
            }
        });

        mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                Toast.makeText(getApplicationContext(), "Presiono", Toast.LENGTH_SHORT).show();
                return false;
            }
        });

        //VerificaPermiso();
        checkLocation();
        VerificaPermiso();
        PosicionActual();

        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

            return;
        }
        mMap.setMyLocationEnabled(true);
    }



    @Override
    protected void onPause() {
        super.onPause();
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        String provider = locationManager.getBestProvider(criteria, true);

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                    ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

                if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                    requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.INTERNET},10);
                }
                return;
            }
            else{
                if (provider != null) {
                    locationManager.removeUpdates(this);
                }
            }

        }
        else{
            if (provider != null) {
                locationManager.removeUpdates(this);
            }

        }


    }

    public void PosicionActual(){
        Location lugar = null;
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        String provider = locationManager.getBestProvider(criteria, true);
        System.out.println("provider" + provider);
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
                    ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

                if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                    requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.INTERNET},10);
                }
                return;
            }
            else{
                if (provider != null) {
                    System.out.println("3");
                    lugar=locationManager.getLastKnownLocation(provider);
                }
            }

        }
        else{
            if (provider != null) {
                System.out.println("3a");
                lugar=locationManager.getLastKnownLocation(provider);
            }

        }
        if(lugar!=null) {
            try {
                setLatLon(lugar.getLongitude(), lugar.getAltitude());
            }catch (Exception e){
                setLatLon(0.0,0.0);
            }
        }
        //agregarmarcador(lugar.getAltitude(),lugar.getLongitude());
        actualizarUbicacion(lugar);
    }

    private void agregarmarcador(double lat, double log){
        LatLng coordenadas = new LatLng(lat,log);
        CameraUpdate miUbicacion = CameraUpdateFactory.newLatLngZoom(coordenadas,16);
        if(marcador!=null)marcador.remove();
        marcador=mMap.addMarker(new MarkerOptions().position(coordenadas)
                .title("Mi posicion Actual")
                .icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher)));
        mMap.animateCamera(miUbicacion);
    }

    private void actualizarUbicacion(Location location){
        if(location!=null){
            latitud=location.getLatitude();
            longitud=location.getLongitude();
            agregarmarcador(latitud,longitud);
        }
    }

    public void iniciarReloj(View view){
        reloj = (Chronometer)findViewById(R.id.reloj);
        reloj.setBase(SystemClock.elapsedRealtime());
        reloj.start();
    }

    @Override
    public void onBackPressed() {
        //super.onBackPressed();

    }


    @Override
    public void onLocationChanged(Location location) {
        System.out.println("Entro al listener");
        Toast.makeText(getApplicationContext(), "Cambio de posicion", Toast.LENGTH_SHORT).show();
        actualizarUbicacion(location);
        hilo();
    }

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

    }

    @Override
    public void onProviderEnabled(String s) {

    }

    @Override
    public void onProviderDisabled(String s) {
        Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
        startActivity(i);
    }

    public void hilo(){
        System.out.println("ENTRO AL HILO");
        Thread tr = new Thread(){
            @Override
            public void run(){
                while(FlagThear==1) {
                    ConexionHTTP HttpPOST = new ConexionHTTP();
                    try {
                        final String Respuesta = HttpPOST.EnviarDatosGPS(String.valueOf(longitud), String.valueOf(latitud), "http://ecuataxi.grupomeraki.org/php/coordenadas.php",ID);
                        System.out.println("Respuesta: "+Respuesta);
                    }
                    catch (Exception e){

                    }
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

                        }
                    });

                    try {
                        Thread.sleep(TIME_HILO);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
        };
        if(PrimeraVez==0) {
            tr.start();
            PrimeraVez=1;
        }
    }

    public void Activar(View view){
        FlagThear=1;
        PrimeraVez=0;
        //hilo();
        Activ.setEnabled(false);
        Desact.setEnabled(true);
    }

    public void Desactivar(View view){
        FlagThear=0;
        Activ.setEnabled(true);
        Desact.setEnabled(false);
    }

    private boolean checkLocation() {
        if (!isLocationEnabled())
            AlertNoGps();
        return isLocationEnabled();
    }

    private void showAlert() {
        Thread tr = new Thread() {
            @Override
            public void run(){
                while(true) {
                    final AlertDialog.Builder dialog = new AlertDialog.Builder(CordenadasMaps.this);
                    dialog.setCancelable(false);
                    dialog.setTitle("Enable Location")
                            .

                                    setMessage("Su ubicación esta desactivada.\npor favor active su ubicación " +
                                            "usa esta app")
                            .

                                    setPositiveButton("Configuración de ubicación", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                                            Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                                            startActivity(myIntent);
                                            return;
                                        }
                                    })
                            .

                                    setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface paramDialogInterface, int paramInt) {
                                            return;
                                        }
                                    });
                    dialog.show();
                }
            }
        };
        tr.start();
    }

    private boolean isLocationEnabled() {
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setBearingRequired(false);
        criteria.setCostAllowed(true);
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        String provider = locationManager.getBestProvider(criteria, true);
        if(provider!=null){
            return locationManager.isProviderEnabled(provider);
        }else {
            return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ||
                    locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        }
    }


    private void AlertNoGps() {
        Thread hil = new Thread() {
            @Override
            public void run(){
                final AlertDialog.Builder builder = new AlertDialog.Builder(CordenadasMaps.this);
                builder.setMessage("El sistema GPS esta desactivado, ¿Desea activarlo?")
                        .setCancelable(false)
                        .setPositiveButton("Si",new DialogInterface.OnClickListener() {
                                    public void onClick ( @SuppressWarnings("unused") final DialogInterface dialog,
                                                          @SuppressWarnings("unused") final int id){
                                        startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                                    }
                                })
                        .setNegativeButton("No",new DialogInterface.OnClickListener() {
                                    public void onClick ( final DialogInterface dialog,
                                                          @SuppressWarnings("unused") final int id){
                                        dialog.cancel();
                                    }
                                });
                alert =builder.create();
                alert.show();
            }
        };
        hil.start();
    }

    @Override
    protected void onDestroy(){
        super.onDestroy();
        if(alert != null)
        {
            alert.dismiss ();
        }
    }
}




Disculpen mi idnorancia.



Un Hacker sabe de la materia;
Un Lamer Cree Saberlo;
Y yo solo aprendo.