2017-04-22 36 views
1

我试图创建一个应用程序,它获得的经度和纬度,从用户的GPS位置,这是类的,我现在用: -无法从GPS

public class GPSTracker extends Service implements LocationListener { 
private final Context mContext; 

// flag for GPS status 
boolean isGPSEnabled = false; 

// flag for network status 
boolean isNetworkEnabled = false; 

// flag for GPS status 
boolean canGetLocation = false; 

Location location; // location 
double latitude; // latitude 
double longitude; // longitude 

// The minimum distance to change Updates in meters 
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters 

// The minimum time between updates in milliseconds 
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 

// Declaring a Location Manager 
protected LocationManager locationManager; 

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

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

     // getting GPS status 
     isGPSEnabled = locationManager 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 

     // getting network status 
     isNetworkEnabled = locationManager 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     if (!isGPSEnabled && !isNetworkEnabled) { 
      // no network provider is enabled 
     } else { 
      this.canGetLocation = true; 
      // First get location from Network Provider 
      if (isNetworkEnabled) { 
       if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
        // TODO: Consider calling 
        // ActivityCompat#requestPermissions 
        // here to request the missing permissions, and then overriding 
        // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
        //           int[] grantResults) 
        // to handle the case where the user grants the permission. See the documentation 
        // for ActivityCompat#requestPermissions for more details. 
        //return TODO; 
        Toast.makeText(this,"It's very important that you agree to gps permission, kindly restart the app and accept",Toast.LENGTH_LONG).show(); 

       } 
       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, 
         MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
       Log.d("Network", "Network"); 
       if (locationManager != null) { 
        location = locationManager 
          .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
        } 
       } 
      } 
      // if GPS Enabled get lat/long using GPS Services 
      if (isGPSEnabled) { 
       if (location == null) { 
        locationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        Log.d("GPS Enabled", "GPS Enabled"); 
        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; 
} 

当我把这个功能在MainActivity它从来没有询问任何权限,也没有显示出任何错误,这是我使用的功能: - :返回0.0,0.0经纬度“https://www.google.com/maps/preview/@0.0,0.0,8z

String getlocurl(){ 
    GPSTracker gps; 
    gps = new GPSTracker(MainActivity.this); 
    double latitude = 0; 
    double longitude = 0; 
    if(gps.canGetLocation()){ 
     latitude = gps.getLatitude(); 
     longitude = gps.getLongitude(); 
     String lat = String.valueOf(latitude); 
     String lng = String.valueOf(longitude); 
     String mapurl = "https://www.google.com/maps/preview/@"+lat+","+lng+","+"8z"; 
     return mapurl; 
    } 
    else{ 
     // can't get location 
     // GPS or Network is not enabled 
     // Ask user to enable GPS/network in settings 
     gps.showSettingsAlert(); 
     return "error"; 
    } 


} 

这是我得到的结果, 我该如何解决?

+0

https://stackoverflow.com/questions/43082062/code-will-only-return-0-0-0-0-gps -coordinate-while-throwing-nullpointerexceptio – CommonsWare

回答

1

把这个清单文件的application标记之前:

<uses-permission android:name="android.permission.INTERNET" />     <!-- verify if connected to the internet --> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  <!-- verify if connected to any network --> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  <!-- verify location using GPS, give precise location --> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- verify location using WiFi and mobile, gives approximate location --> 
+0

谢谢Saurabh。加1。 – statosdotcom