【问题标题】:android GPS location doesn't work?安卓GPS定位不工作?
【发布时间】:2017-02-03 21:55:13
【问题描述】:

我是 android 开发新手,我尝试了 2 个教程来获取当前位置,但它们都不适合我。我得到了确切的预期布局,但没有显示位置,它似乎完全空白,好像设置文本字段的命令不存在一样。 logcat 没有显示任何异常,这就是我没有发布它的原因。其他一切看起来都很正常。 我认为这可能与从 android 6.0 开始必须实时运行的权限有关,但是我尝试过的本教程处理了这个问题,除了缺少权限不会引发安全异常吗? 以下是我完全按照原样遵循的两个教程:

http://demonuts.com/2016/12/30/get-current-location-android-studio/

http://www.viralandroid.com/2015/12/how-to-get-current-gps-location-programmatically-in-android.html

【问题讨论】:

    标签: android geolocation gps android-gps


    【解决方案1】:

    要使用地图,您需要将 google_maps_key 放入 values 文件夹下的 google_maps_api.xml。您可以在 google api manager 中获取此密钥。

    【讨论】:

      【解决方案2】:

      我使用设备内部的谷歌地图,通过意图传递纬度和经度,然后单击一个按钮。

      String uri = "geo:0,0?q="+ gps.getLatitude() + "," + gps.getLongitude() ;                
                  Intent intent = new Intent(Intent.ACTION_VIEW);
                  intent.setData(Uri.parse(uri));
                  if (intent.resolveActivity(getPackageManager()) != null) {
                      startActivity(intent);
                  }
      

      我创建了一个类 TrackGPS 来帮助我获取电线。

          public class TrackGPS extends Service implements LocationListener {
      
      
          private final Context mContext;
      
      
          boolean checkGPS = false;
      
      
          boolean checkNetwork = false;
      
          boolean canGetLocation = false;
      
          Location loc;
          double latitude;
          double longitude;
      
      
          private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10;
      
      
          private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1;
          protected LocationManager locationManager;
      
          public TrackGPS(Context mContext) {
              this.mContext = mContext;
              getLocation();
          }
      
          private Location getLocation() {
      
              try {
                  locationManager = (LocationManager) mContext
                          .getSystemService(LOCATION_SERVICE);
      
                  // getting GPS status
                  checkGPS = locationManager
                          .isProviderEnabled(LocationManager.GPS_PROVIDER);
      
                  // getting network status
                  checkNetwork = locationManager
                          .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
      
                  if (!checkGPS && !checkNetwork) {
                      Toast.makeText(mContext, "No Service Provider Available", Toast.LENGTH_SHORT).show();
                  } else {
                      this.canGetLocation = true;
                      // First get location from Network Provider
                      if (checkNetwork) {
      //                    Toast.makeText(mContext, "Network", Toast.LENGTH_SHORT).show();
      
                          try {
                              locationManager.requestLocationUpdates(
                                      LocationManager.NETWORK_PROVIDER,
                                      MIN_TIME_BW_UPDATES,
                                      MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
      //                        Log.d("Network", "Network");
                              if (locationManager != null) {
                                  loc = locationManager
                                          .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
      
                              }
      
                              if (loc != null) {
                                  latitude = loc.getLatitude();
                                  longitude = loc.getLongitude();
                              }
                          } catch (SecurityException e) {
      
                          }
                      }
                  }
                  // if GPS Enabled get lat/long using GPS Services
                  if (checkGPS) {
      //                Toast.makeText(mContext, "GPS", Toast.LENGTH_SHORT).show();
                      if (loc == null) {
                          try {
                              locationManager.requestLocationUpdates(
                                      LocationManager.GPS_PROVIDER,
                                      MIN_TIME_BW_UPDATES,
                                      MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
      //                        Log.d("GPS Enabled", "GPS Enabled");
                              if (locationManager != null) {
                                  loc = locationManager
                                          .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                                  if (loc != null) {
                                      latitude = loc.getLatitude();
                                      longitude = loc.getLongitude();
                                  }
                              }
                          } catch (SecurityException e) {
      
                          }
                      }
                  }
      
              } catch (Exception e) {
                  e.printStackTrace();
              }
      
              return loc;
          }
      
          public double getLongitude() {
              if (loc != null) {
                  longitude = loc.getLongitude();
              }
              return longitude;
          }
      
          public double getLatitude() {
              if (loc != null) {
                  latitude = loc.getLatitude();
              }
              return latitude;
          }
      
          public boolean canGetLocation() {
              return this.canGetLocation;
          }
      
          public void showSettingsAlert() {
              AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
      
              alertDialog.setTitle("GPS Not Enabled");
      
              alertDialog.setMessage("Do you wants to turn On GPS");
      
              alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                  public void onClick(DialogInterface dialog, int which) {
                      Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                      mContext.startActivity(intent);
                  }
              });
      
      
              alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
                  public void onClick(DialogInterface dialog, int which) {
                      dialog.cancel();
                  }
              });
      
      
              alertDialog.show();
          }
      
      
      //    public void stopUsingGPS() {
      //        if (locationManager != null) {
      //
      //
      //            locationManager.removeUpdates(TrackGPS.this);
      //        }
      //    }
      
          @Override
          public IBinder onBind(Intent intent) {
              return null;
          }
      
          @Override
          public void onLocationChanged(Location location) {
      
          }
      
          @Override
          public void onStatusChanged(String s, int i, Bundle bundle) {
      
          }
      
          @Override
          public void onProviderEnabled(String s) {
      
          }
      
          @Override
          public void onProviderDisabled(String s) {
      
          }
      
      
      }
      

      别忘了申请 GPS 权限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-11
        相关资源
        最近更新 更多