我的 Android 应用程序有两个位置侦听器,一个用于精细侦听,一个用于粗略侦听。我希望能够检测到用户何时关闭和打开他们的位置服务。
每当我关闭手机 GPS 或网络定位服务时,onProviderDisabled 方法就会按预期调用。当我打开 GPS 或网络服务时,永远不会调用 onProviderEnabled!
我已将其中一位听众的代码放在下面....
更新...
我发现问题与取消注册 onPause 中的侦听器有关。当我删除代码“locationManager.removeUpdates(myFineLocationListener);” 调用了 onProviderEnabled() 方法。
也许禁用(比如说)GPS 的行为会自动取消注册听众?也许我应该在 onDestroy 而不是 onPause() 中注销 thje 监听器???
PS。也许我提到我的活动有一个直接进入设备位置设置页面的按钮是相关的。它充当快捷方式。我使用此快捷方式禁用/启用位置服务,然后使用返回按钮返回我的应用程序。我将把这个按钮的代码放在这篇文章的最后。
代码:
(从 onCreate() 调用 createLocListeners() 方法;)
void createLocListeners() {
//if null, create a new listener
//myFineLocationListener is a class variable
if (myFineLocationListener == null) {
//Listen for FINE location updates
myFineLocationListener = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
//Do something
}
@Override
public void onProviderDisabled(String provider) {
//This gets called when I change location settings (eg GPS on or off) on the phone }
@Override
public void onProviderEnabled(String provider) {
//This DOES NOT get called when I change location settings (eg GPS on or off) on the phone
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}; //end on location listener
} //end if fine listener is null
} //end createLocListener() function
@Override
protected void onResume() {
super.onResume();
//REGISTER LOCATION LISTENERS
try {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, LISTENING_INTERVAL, LISTENING_DISTANCE, myFineLocationListener);
}
catch (IllegalArgumentException e){
//Tried catching exceptions but there weren't any
}
catch (RuntimeException e) {
}
}// end onResume()
@Override
protected void onPause() {
super.onPause();
//UNREGISTER LOCATION LISTENERS
locationManager.removeUpdates(myFineLocationListener);
} //end onPause
类似问题: 从未调用过位置服务 onProviderEnabled
打开位置设置页面的按钮代码...
//JUMP TO LOCATION SERVICES SETTINGS
ibLoc.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
}); //end jump to location services button listener