Android LocationListener - 无法在onProviderDisabled / onProviderEnabled中检测到Wifi

时间:2017-09-10 08:02:50

标签: android gps location android-wifi locationlistener

我有一个服务,它为GPS和网络提供商使用LocationListeners。

GPS监听器检测到我在手机上禁用或启用GPS但网络(Wifi)的监听器没有检测到wifi关闭/打开。 下面是我处理GPS和网络的监听器的代码。我不知道为什么我只能得到" gps"在onProviderEnabled / onProviderDisabled。

我错过了什么吗?

@Override
public void onLocationChanged(Location location) {

if (Double.parseDouble(String.valueOf(location.getAccuracy())) > noiseAllowance) {

    return;

}

if (provider.equals(LocationManager.GPS_PROVIDER)) {

    gotPositionFromGps();

}

changeNotificationText(location);

processNewLocation(location);

}

@Override
public void onProviderDisabled(String provider) {

//Here, when I disable Wifi on my phone, provider never returns wifi

if (new CheckAvailableProviders().checkGps(context))

    return;

cleanResources();

}

@Override
public void onProviderEnabled(String provider) {

//Here, when I enable Wifi on my phone, provider never returns wifi

if (this.provider.equals(LocationManager.GPS_PROVIDER)
        && provider.equals(LocationManager.NETWORK_PROVIDER)
        && canEnableNetworkListener > 0) {

    service.getLocationFromNetwork(60 * 1000, 15);

  }
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

private void cleanResources() {

stopService();

clearVariables();

}

private void clearVariables() {

try {
    countDown.cancel();
} catch (Exception e) {
}

countDown = null;

builder = null;

calculateHome = null;

context = null;

manageNotifications = null;

provider = null;

service = null;

}

private void stopService() {

Intent sendIntent = new Intent();

sendIntent.setAction("com.location.home.device.STOPPED_GETTING_LOCATION");

context.sendBroadcast(sendIntent);

 context.stopService(new Intent(context, GpsService.class));

}

private void changeNotificationText(Location location) {

DecimalFormat precision = new DecimalFormat("0.000");

double lat = location.getLatitude();
double lon = location.getLongitude();

builder.setContentText(
        context.getResources().getString(R.string.notification_text) +
                String.valueOf(precision.format(lat)) +
                " N " +
                String.valueOf(precision.format(lon)) +
                " E");

manageNotifications.notify(1, builder.build());

}

private void gotPositionFromGps() {

restartCountDown();

canEnableNetworkListener = 0;

service.removeListenerUpdates(1);

}

清单权限:

    

<uses-permission android:name="android.hardware.location.gps"/>

<uses-permission android:name="android.hardware.location.network"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<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" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

1 个答案:

答案 0 :(得分:0)

根据documentation

  

此提供商根据手机信号塔的可用性确定位置   和WiFi接入点。

因此,如果可以访问蜂窝网络,则不需要Wi-Fi,因此只需关闭Wi-Fi即可禁用提供商。

相关问题