位置经理未正确检查

时间:2014-07-02 14:43:08

标签: android boolean android-wifi locationmanager

这是我必须检查我当前位置的代码。我已经在我的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();

2 个答案:

答案 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();
 }

您可以简单地设置一些滞后/长变量,并在任何需要的地方使用它们,而不是在吐司中显示纬度/经度。