gpt4 book ai didi

android - 为什么不调用 Android 的 onProviderEnabled() 方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:59:10 25 4
gpt4 key购买 nike

我的 Android 应用程序有两个位置监听器,一个用于精细监听,一个用于粗略监听。我希望能够检测用户何时关闭和打开他们的位置服务。

每当我关闭手机的 GPS 或网络定位服务时,都会按预期调用 onProviderDisabled 方法。当我打开 GPS 或网络服务时,永远不会调用 onProviderEnabled!

我已将其中一个监听器的代码放在下面....

更新...

我发现问题与取消注册 onPause 中的监听器有关。当我删除代码时 "locationManager.removeUpdates(myFineLocationListener);" 调用 onProviderEnabled() 方法。

也许禁用(比方说)GPS 的行为会自动注销监听器?也许我应该在 onDestroy 而不是 onPause() 中取消注册监听器???

附言。也许我提到我的 Activity 有一个直接进入设备位置设置页面的按钮是相关的。它充当快捷方式。我使用此快捷方式禁用/启用定位服务,然后使用返回按钮返回到我的应用程序。我将把这个按钮的代码放在这篇文章的最后。

代码:

(createLocListeners() 方法是从 onCreate() 调用的;)

 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

类似问题: Location service onProviderEnabled never called

打开位置设置页面的按钮代码...

        //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

最佳答案

IMO,当您进入设置时,onPause() 被调用并且监听器被注销。然后您启用 GPS 并返回您的 Activity 。因此,当您注册监听器时,GPS 已经启用,因此永远不会调用监听器 onProviderEnabled(),因为它仅在 GPS 状态更改为启用时调用。

关于android - 为什么不调用 Android 的 onProviderEnabled() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com