- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的应用程序的一位用户报告说,即使他确实打开了应用程序,它也会告诉网络位置信息已关闭。他给我发了一些屏幕截图,它们让我思考;
LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
无法正常工作。他的手机运行的是 Android 4.1.2,我首先想到 this是这个问题的原因。但事实并非如此。他也给我发了一张该设置的屏幕截图。
然后我用谷歌搜索并找到了this .这个问题似乎对我有帮助,但不幸的是答案对这个案例没有帮助,提问者没有进一步追问。
我的应用程序与位置相关,并且一直在使用 LocationManager.isProviderEnabled 来了解 GPS 和位置网络是打开还是关闭。直到最近我才被告知我的应用程序无法正确识别这些设置。他是第一个报告该问题的用户。通过查看 Secure.LOCATION_PROVIDERS_ALLOWED,我了解到还有另一种方法可以了解 GPS 和网络的位置设置。为了查看此方法在他的手机上如何工作,我编写了一个简单的应用程序并让他运行。这个应用程序执行简单的任务并在屏幕上显示文本。
LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
string = "GPS=on\n";
}
else
{
string = "GPS=off\n";
}
if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
{
string += "Network=on\n";
}
else
{
string += "Network=off\n";
}
String status = android.provider.Settings.Secure.getString(getContentResolver(), Secure.LOCATION_PROVIDERS_ALLOWED);
if(status.contains("gps"))
{
string += "GPS=on\n";
}
else
{
string += "GPS=off\n";
}
if(status.contains("network"))
{
string += "Network=on\n";
}
else
{
string += "Network=off\n";
}
他再次发回屏幕截图。看起来;
GPS=on
Network=off
GPS=on
Network=on
这个结果并没有让我高兴。这可能有一些可能性。
现在我的问题是;
提前致谢。
编辑 1:
Here您可以从 Google Play 下载测试应用程序进行试用或请人试用。
编辑6:
我删除了测试应用程序,因为这个问题得到了回答。
编辑 2:
我发布了我的应用程序,该应用程序通过查看 Secure.LOCATION_PROVIDERS_ALLOWED 检查网络提供商是否可用,但在有限的手机上出现异常。这些是 ACRA 的报告。
一些运行 OS 4.1.1 的手机。
java.lang.IllegalArgumentException: requested provider network doesn't exisit
at android.os.Parcel.readException(Parcel.java:1434)
at android.os.Parcel.readException(Parcel.java:1384)
at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:675)
at android.location.LocationManager._requestLocationUpdates(LocationManager.java:686)
at android.location.LocationManager.requestLocationUpdates(LocationManager.java:508)
一些运行 OS 4.1.2 的手机。
java.lang.IllegalArgumentException: provider=network
at android.os.Parcel.readException(Parcel.java:1439)
at android.os.Parcel.readException(Parcel.java:1389)
at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:659)
at android.location.LocationManager._requestLocationUpdates(LocationManager.java:690)
at android.location.LocationManager.requestLocationUpdates(LocationManager.java:512)
在我更改一种方法来检查网络提供商的位置是否可用之前,我从未见过这些异常。所以我认为 LocationManager.isProviderEnabled 是安全的,看到 Secure.LOCATION_PROVIDERS_ALLOWED 是有风险的。但这会让我回到原来的问题。当 Secure.LOCATION_PROVIDERS_ALLOWED 告诉有 IS 时,为什么 LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 返回 false(实际上并不存在)。 Android 操作系统设计不佳吗?或者我只是看到仅与特定(但至少有 2 个)手机相关的问题?
编辑 3:
我更新了测试应用程序以显示 GPS/网络位置提供程序是否真的可以通过访问 requestLocationUpdates() 来显示。
我公开了 2 个手机的名字。
1) SBM200SH, OS4.1.2, Softbank mobile, Sharp Corporation
2) HTX21 (INFOBAR A02), OS4.1.1, KDDI, HTC
编辑4:
我找到了第三部手机。
3) SBM203SH, OS4.1.2, 软银移动, 夏普公司
编辑5:
Sharp Corporation 正在为移动开发人员运行讨论空间。我通过提出这个 SO 的问题来发布主题。我希望夏普公司的人为此采取行动。我会及时更新。
最佳答案
Sharp 公司提供的开发人员支持非常出色,他们在不到 48 小时内回答了我的问题。
这是我从他们那里得到的。
必须满足 2 个条件 LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 返回 true。
第二个很明显。但是第一个不是。他们告诉如何模拟第一个是负面的。您可以通过下面显示的步骤并运行我的测试应用程序来确认问题(请查看我的问题以获取下载链接)。
出于某种原因,我无法理解用户的手机未能执行与上述第一种情况相关的操作并出现问题。
结论:
LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 是可靠的。请注意,Secure.LOCATION_PROVIDERS_ALLOWED 不太可靠。
关于android - LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) 不可靠,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16748300/
我的程序运行良好,但突然 NETWORK_PROVIDER 停止提供位置更新。如果启用 WIFI,它也不起作用。有人知道为什么吗? 谢谢! 这是一些(加密的)Java: package com.tri
LocationManager locationManager = (LocationManager)getApp().getSystemService(Context.LOCATION_SERVIC
我需要通过 3G 或 WIFI 检索用户的位置。 这就是我想要做的: LocationListener locationListener = new LocationListener() {
我为用户构建应用程序以获取最后位置或当前位置。我同时使用 NETWORK_PROVIDER 和 GPS_PROVIDER。NETWORK_PROVIDER 没有什么问题。 1.当我在 Micromax
是否有任何我可以使用的代码,这样我就不必自己实现它来自动从 GPS_PROVIDER 更改为 NETWORK_PROVIDER? 实际上我使用这段代码: locationManager.request
我已经使用网络位置提供程序实现了基于位置的服务,但它没有为我提供准确的位置。我的问题是 网络位置提供程序如何工作?以及为什么它不提供准确的位置。 获取准确位置的替代方法是什么(我没有室内 GPS 服务
如何检查 LocationManager.NETWORK_PROVIDER 是否可用? 我在 AndroidManifest.xml 中启用,但我需要在代码中检查它是否不可用以使用 GPS_PROVI
我尝试使用 NETWORK_PROVIDER 获取当前位置并注册 LocationListener: locManager.requestLocationUpdates(LocationManager
Android 用户是否有机会重置 NetworkProvider,以便位置为空?我想出了一个想法,即在第一次启动设备后,只有该位置为空。而且谷歌会立即检查位置以征求我的意见。 当然,我正在为这种罕见
我在同一位置获得不同的 Gps 坐标,这就是为什么会发生这种情况。但我需要更改 gps 坐标仅在 10 米后移动。我该怎么做。 这是我的代码。 private static final long
我正在使用 NETWORK_PROVIDER 获取地点的 latitude 和 longitude。 我已经检查了“位置和安全”中的设置并启用了“使用无线网络”。但是 "isProviderEnabl
我需要获取用户的位置。我把 list 放进去 如何提示用户启用 GPS_PROVIDER 和/或 NETWORK_PROVIDER ? 最佳答案 您可以为位置设置启动选项 Intent 。 Inte
有谁知道 WI-FI 提供商的位置更改事件监听器发生了什么。我看到很多关于这个的问题,但没有正确的答案。 我做的一切都很好,它适用于旧版本的 android,但现在我将我的 SAMSUNG GALAX
我不知道为什么,但我的可变 isNetowrkEnabled 总是返回 true。我的设备上是否启用互联网并不重要。 这是我的 GPSTracker 类: public class GPSTracke
我正在谷歌地图应用程序中检查 Activity 的互联网连接,并且我想在互联网处于 Activity 状态时执行特定操作,如果互联网处于非 Activity 状态则执行另一个操作。 if(manage
好吧,我花了很多时间搜索和阅读,而不仅仅是这个网站。大多数线程处理 GPS 或试图让它在模拟器中工作。 developer.android.com 上的文档只解释了一点。我无法让一件简单的事情发挥作用
我的应用程序的一位用户报告说,即使他确实打开了应用程序,它也会告诉网络位置信息已关闭。他给我发了一些屏幕截图,它们让我思考; LocationManager.isProviderEnabled(Loc
我正在尝试做什么 使用 Service 在指定的时间间隔获取用户位置,这样只要应用程序正在运行,就可以检索 Location 我遇到的问题 即使我长时间处于同一位置,每次 Latitude 、Long
我正在开发一个应用程序,该应用程序可以在服务中的 6 分钟和 6 分钟内全天获取手机的位置,它工作正常,但有时网络提供商监听器的方法 OnLocationChanged 停止存在打电话,我不知道为什么
如何检查我使用 GPS_PROVIDER 或 NETWORK_PROVIDER 获得的位置是否小于 60 秒?我知道以毫秒为单位获取 location.getTime() 但我无法将其与 System
我是一名优秀的程序员,十分优秀!