(0,0)经度和经度正在Android设备上显示

时间:2017-10-11 21:02:59

标签: java android firebase firebase-realtime-database

以下GPSTracker.java和location.java在Android设备上运行,即使在该位置打开并且设置了权限后显示(0,0),甚至在连接到firebase之后,值也没有更新到数据库(我完成了所有的firbase数据库设置)任何人都可以帮助我

GPSTracker.java

import android.Manifest;
import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;

public class GPSTracker extends Service implements LocationListener {
private final Context mContext;
boolean isGPSEnabled=false;
boolean isNetworkEnabled=false;
boolean canGetLocation=false;
Location location;
double latitude;
double longitude;

private static final long MIN_DISTANCE_FOR_UPDATES=10;
private static final long MIN_TIME_BW_UPDATES=1000*6*1;
protected LocationManager locationManager;

public GPSTracker(Context context){
    this.mContext=context;
    getLocation();
}

public Location getLocation(){

    try{
        locationManager=(LocationManager) mContext.getSystemService(LOCATION_SERVICE);

        isGPSEnabled=locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        isNetworkEnabled=locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if(!isGPSEnabled && !isNetworkEnabled){

        }else{
            this.canGetLocation=true;
            if(isNetworkEnabled){
                if (ActivityCompat.checkSelfPermission(this,android.Manifest.permission.ACCESS_FINE_LOCATION)!=
                        PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission
                        (this, Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED){
                            return null;
                }
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_FOR_UPDATES,this);
                if(locationManager!=null){
                    location=locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

                    if(location!=null) {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                    }
                }
            }
                if(isGPSEnabled){
                    if(location==null){
                        locationManager.requestLocationUpdates(LocationManager.
                                GPS_PROVIDER,MIN_TIME_BW_UPDATES,MIN_DISTANCE_FOR_UPDATES,this);

                        if(locationManager!=null){
                            location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

                            if(location!=null){
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
        }

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

public void stopUsingGPS(){
    if(locationManager!=null){
        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.removeUpdates(GPSTracker.this);
    }
}

public double getLatitude(){
    if(location!=null){
        latitude=location.getLatitude();
    }
    return latitude;
}

public double getLongitude(){
    if(location!=null){
        longitude=location.getLatitude();
    }
    return longitude;
}

public boolean canGetLocation(){
    return this.canGetLocation;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

public void showSettingsAlert(){
    AlertDialog.Builder alertDialog =new AlertDialog.Builder(mContext);
    alertDialog.setTitle("GPS is Settings");
    alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
    alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            Intent intent=new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            mContext.startActivity(intent);
        }
    });
    alertDialog.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    alertDialog.show();
}

@Override
public void onLocationChanged(Location location) {

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}
}

location.java

import android.Manifest;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.test.mock.MockPackageManager;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class location extends AppCompatActivity {

    FirebaseDatabase database;
    DatabaseReference myRef;
    Button btnShowLocation;
    private static final int REQUEST_CODE_PERMISSION=2;
    String mPermission = Manifest.permission.ACCESS_FINE_LOCATION;

    GPSTracker gps;
    TextView location;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_location);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        try{
            if(ActivityCompat.checkSelfPermission(this,mPermission)!= MockPackageManager.PERMISSION_GRANTED){
                ActivityCompat.requestPermissions(this,new String[]{mPermission},REQUEST_CODE_PERMISSION);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        btnShowLocation=(Button)findViewById(R.id.button);
        btnShowLocation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                gps=new GPSTracker(location.this);
                location=(TextView)findViewById(R.id.locationText);
                if(gps.canGetLocation()){
                    double latitude=gps.getLatitude();
                    double longitude=gps.getLongitude();
                    database=FirebaseDatabase.getInstance();
                    location.setText(latitude+"   "+longitude);
                    myRef=database.getReference("Location");
                    myRef.setValue(latitude+","+longitude);
                }else{
                    gps.showSettingsAlert();
                }
            }
        });
    }

}

0 个答案:

没有答案