我应该如何订阅广播接收机来监听位置服务的变化

时间:2017-03-01 12:14:52

标签: android location wifi

我正在使用管理wifi个关联的应用,我遇到的问题是android 6.0当用户关闭位置服务时,wifi扫描已关闭。< / p>

我想要知道的是,当用户关闭并且location services时,我可以订阅一个动作。我在android文档中搜索了两个可能的操作,但我不确定使用哪个。

行动是

android.location.PROVIDERS_CHANGED

android.location.MODE_CHANGED

文档没有帮助我。非常感谢

2 个答案:

答案 0 :(得分:0)

清单:

<action android:name="android.location.PROVIDERS_CHANGED" />


<receiver android:name=".ObserveGpsState">
    <intent-filter>
        <action android:name="android.location.PROVIDERS_CHANGED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

然后......

   public class ObserveGpsState extends BroadcastReceiver {        
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().matches(LocationManager.PROVIDERS_CHANGED_ACTION)) {
               ......... 
            }
        }
    }

答案 1 :(得分:0)

当用户想要在打开/关闭位置提供

时触发任何操作时,此功能非常有用

您应该在清单

中添加此操作
<action android:name="android.location.PROVIDERS_CHANGED" />

添加此操作后,您可以触发广播接收器

<receiver android:name=".GpsLocationReceiver">
    <intent-filter>
        <action android:name="android.location.PROVIDERS_CHANGED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

在您的BroadcastReceiver课程中,您必须在该课程中实施LocationListener,如下所示。

  public class GpsLocationReceiver extends BroadcastReceiver {        
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().matches("android.location.PROVIDERS_CHANGED")) {
                Toast.makeText(context, "in android.location.PROVIDERS_CHANGED",
                Toast.LENGTH_SHORT).show();
           LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    if( !locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) ) {
       //NO GPS
    }else{
//Gps is on
     }
            }
        }
    }