首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >全球定位系统的IsProviderEnabled不起作用

全球定位系统的IsProviderEnabled不起作用
EN

Stack Overflow用户
提问于 2012-07-05 17:46:26
回答 3查看 3.5K关注 0票数 4

我们已经为Android实现了一个基于地理位置的应用程序,因此我们需要确保GPS始终处于启用状态。问题是

代码语言:javascript
运行
复制
manager.isProviderEnabled( LocationManager.GPS_PROVIDER )

总是返回false,即使启用了GPS提供程序,所以我们的应用程序总是显示更改GPS状态的警报,或者它不工作。

你知道发生了什么吗?

我们正在使用三星Galaxy S和HTC Wildfire设备对其进行测试。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-05 18:19:30

您可以直接从系统获取GPS状态:

代码语言:javascript
运行
复制
LocationManager myLocationManager = (LocationManager)  getSystemService(Context.LOCATION_SERVICE);

private boolean getGPSStatus()
{
   String allowedLocationProviders =
   Settings.System.getString(getContentResolver(),
   Settings.System.LOCATION_PROVIDERS_ALLOWED);

   if (allowedLocationProviders == null) {
      allowedLocationProviders = "";
   }

   return allowedLocationProviders.contains(LocationManager.GPS_PROVIDER);
} 
票数 5
EN

Stack Overflow用户

发布于 2016-06-11 01:27:01

你需要首先检查GPS是否真的出现在你的手机上。如果你的手机是廉价手机,它很可能会使用网络位置作为位置提供商。

你可以试试这个:

代码语言:javascript
运行
复制
private boolean isGPSEnabled() {
Context context = Session.getInstance().getCurrentPresenter().getViewContext();

LocationManager locationMgr = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

boolean GPS_Sts = locationMgr.isProviderEnabled(LocationManager.NETWORK_PROVIDER)|| locationMgr.isProviderEnabled(LocationManager.GPS_PROVIDER);

return GPS_Sts;
}
票数 0
EN

Stack Overflow用户

发布于 2017-11-13 14:14:05

有时,您的设备设置为使用WiFi网络而不是全球定位系统获取位置,这样位置将被打开,但当检查GPS_PROVIDER时,您的应用程序将返回false。

正确的解决方案是同时检查GPS和网络:

如果您想使用Settings进行检查

代码语言:javascript
运行
复制
private boolean checkIfLocationOpened() {
    String provider = Settings.Secure.getString(getActivity().getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
    if (provider.contains("gps") || provider.contains("network"))
        return true;
    }
    // otherwise return false
    return false;
}

如果您想要使用LocationManager

代码语言:javascript
运行
复制
private boolean checkIfLocationOpened() {
    final LocationManager manager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
    if (manager.isProviderEnabled(LocationManager.GPS_PROVIDER) || manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
        return true;
    }
    // otherwise return false
    return false;
}

你可以在my answer here上找到完整的细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11341771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档