【问题标题】:How do I find out programmatically which mode of Location is turned on?如何以编程方式找出打开了哪种位置模式?
【发布时间】:2016-10-11 13:41:19
【问题描述】:

我正在开发一个应用程序,其中仅使用 GPS 提供程序(仅设备模式的位置)跟踪用户的位置。因此,如果用户使用 Wifi 和数据将其位置优先级设置为 Approximate Location,应用程序将无法按预期工作。因此,我需要以编程方式检查用户选择的位置模式(高精度、近似位置或仅限设备)并显示适当的对话框。什么是实现这一目标的干净方法?

【问题讨论】:

  • @DanielNugent 我不想要广播接收器那么重的东西。我觉得凯伦的答案是要走的路。让我检查一下。
  • 那个链接的答案有你需要的代码,但也有很多其他的东西。我刚刚在这里发布了一个答案,其中只有您需要的代码......

标签: android gps android-location


【解决方案1】:

你可以 LocationProvider.getAccuracy: https://developer.android.com/reference/android/location/LocationProvider.html

来自文档: int getAccuracy () 返回描述此提供程序的水平精度的常量。如果提供者返回更细粒度或精确位置,则返回 ACCURACY_FINE,否则如果位置只是近似值,则返回 ACCURACY_COARSE。

【讨论】:

  • 谢谢让我看看!
【解决方案2】:

1、查看provider模式(gps、network、cellar-id)

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
//get currently used providers
locationManager.getProviders(true);

2、显示对话框

new AlertDialog.Builder(this).
setTitle("Title").
setMessage("content").
show();

【讨论】:

    【解决方案3】:

    请注意,您的应用可以在仅 GPS 模式和高精度模式下运行,因为这两种设置都启用了 GPS。

    为了检查 GPS 是否已启用,这可以解决问题。

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    
    boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    
    if (!isGpsEnabled) {
       //show your alert here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 2017-12-21
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-31
      • 2016-06-04
      相关资源
      最近更新 更多