我使用NETWORK_PROVIDER来获得latitude和longitude的地方.
我已经检查了"位置和安全性"中的设置并启用了"使用无线网络".但"isProviderEnabled(LocationManager.NETWORK_PROVIDER)"总是回来false.
谁能帮我?先感谢您!
这是我的代码:
LocationManager locManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean isEnableGPS=locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean isEnableNTW=locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Log.d(TAG, isEnableGPS+", "+isEnableNTW);
Run Code Online (Sandbox Code Playgroud)
AndroidMainfest.xml中的权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud) 我的应用程序的一个用户报告说应用程序告诉网络位置已关闭,即使他确实打开了它.他给我发了几张屏幕截图,他们让我思考;
LocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
Run Code Online (Sandbox Code Playgroud)
工作不正常.他的手机运行的是Android 4.1.2,首先我认为这是导致这个问题的原因.但事实并非如此.他也给我发了一个屏幕截图.
然后我用Google搜索并找到了这个.这个问题似乎对我有所帮助,但不幸的是,回答对这个案子没有帮助,提问者没有进一步追求.
我的应用程序与位置有关,并且一直使用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";
}
Run Code Online (Sandbox Code Playgroud)
他再次发回屏幕截图.它看起来;
GPS=on
Network=off
GPS=on
Network=on
Run Code Online (Sandbox Code Playgroud)
这个结果并没有让我开心.这可能有一些可能性.
现在我的问题是;
即使用户的设备已关闭GPS并且不允许应用访问其位置,我也需要确定设备所在的国家/地区(iso3).
我还需要考虑没有SIM卡的平板电脑,因此不能使用telephonyManager.
出于这个原因,我不相信我可以使用位置管理器(也是因为这些原因:LocationManager requestLocationUpdates不起作用)
我认为我需要的方法是向第三方ip位置api发出简单的HTTP请求:例如 http://www.ipinfodb.com/ip_location_api.php 或 https://freegeoip.net
这是最好的方法吗?什么是最好的开放api使用?