这是我必须检查我当前位置的代码。我已经在我的Android设备上启用了Wifi但是网络已启用始终为假。
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean networkIsEnabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Location loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
double lat = loc.getLatitude();
double lng = loc.getLongitude();
答案 0 :(得分:1)
它不会检查WiFi是否已启用,isProviderEnabled()会检查用户是否在手机的位置设置中启用了网络提供商。
答案 1 :(得分:0)
我遇到了类似的问题。
你的清单应该有:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application ....
<receiver
android:name="com.your_package.ConnectionChangeReceiver"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.wifi.STATE_CHANGE"/>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
</application>
如果您只想要当前位置,则不需要应用程序标记中的块,但如果您希望主动检测网络状态何时发生变化,那么您将需要它。在这种情况下,ConnectionChangeReceiver将是扩展BroadcastReceiver的类。
希望这有帮助。
修改强>
只是澄清一下,网络指的是3 / 4G。如果您的WIFI启用了飞行模式,则网络将为false。你必须同时检查WIFI和3 / 4G。
ConnectivityManager conMngr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo wifi = conMngr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = conMngr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if(wifi.isAvailable() && wifi.isConnected())
// available + connected
if(mobile.isAvailable() && mobile.isConnected())
// available + connected
注意:为了检查这样的wifi状态,您需要在清单中显示“ACCESS_WIFI_STATE”。我在上面添加了它。
编辑2:
这就是你如何获得LAT / LONG:
GPSTracker类: http://pastebin.com/ESXzfdcu
您想要滞后/长时间的课程:
GPSTracker gps = new GPSTracker(MainActivity.this);
if(gps.canGetLocation()) {
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
}else {
gps.showSettingsAlert();
}
您可以简单地设置一些滞后/长变量,并在任何需要的地方使用它们,而不是在吐司中显示纬度/经度。