私のAndroidアプリには、2つのロケーションリスナーがあります。1つはファインリスニング用、もう1つはコースリスニング用です。ユーザーが位置情報サービスをオフまたはオンにしたときを検出できるようにしたい。
電話のGPSまたはネットワーク位置情報サービスをオフにすると、期待どおりにonProviderDisabledメソッドが呼び出されます。GPSまたはネットワークサービスをオンにすると、onProviderEnabledが呼び出されません。
リスナーの1人のコードを以下に示します。
アップデート...
この問題は、onPauseでリスナーの登録を解除することに関連していることがわかりました。コード「locationManager.removeUpdates(myFineLocationListener);」を削除すると onProviderEnabled()メソッドが呼び出されます。
おそらく、(たとえば)GPSを無効にする行為は、リスナーの登録を自動的に解除しますか?おそらく、onPause()ではなくonDestroyでリスナーの登録を解除する必要があります???
PS。たぶん、私のアクティビティには、デバイスの場所の設定ページに直接移動するボタンがあることを述べておくことは重要です。ショートカットとして機能します。このショートカットを使用して位置情報サービスを無効/有効にし、[戻る]ボタンを使用してアプリに戻ります。このボタンのコードは、この投稿の最後に配置します。
コード:
(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
同様の問題: 位置情報サービス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