5

GPS サービスを停止する OnPause コードをインストールしても、GPS は停止しません。これが私のコードです。

    @Override
    protected void onPause() {
        if(lm != null) {
            lm.removeUpdates(ll);
        }
        ll = null;
        lm = null;
        super.onPause();
    }

lm と ll が保護された変数としてグローバルに宣言されている限り、このコードはエラーなしで実行されます。問題は、プログラムを終了した後も GPS アイコンが表示されたままになることです。GPS をオフにするにはどうすればよいですか? これを電話とエミュレーターでテストしました。

4

3 に答える 3

1

docがremoveUpdates(LocationListenerリスナー)について述べているように:

指定されたLocationListenerでの現在のアクティビティのロケーション更新の現在の登録を削除します。

現在のコードは、GPSを停止したり、ステータスバーからアイコンを削除したりせずに、指定されたLocationListenerで現在のアクティビティの位置を更新するための現在の登録のみを削除します。GPSを停止したい場合は、2つの解決策があります。

最初の解決策:コードで停止します(Android 2.3より下でのみ機能します):

  try{
    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

    if(!provider.contains("gps")){
         final Intent poke = new Intent();
         poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
         poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
         poke.setData(Uri.parse("3")); 
         sendBroadcast(poke);
     }
     }
     catch(Exception e)
     {
      Log.d("Location", " exception thrown in enabling GPS "+e);
     }

Manifest.xmlでのアクセス許可:

android.permission.WRITE_SECURE_SETTINGS

2番目の解決策: GPS設定を起動しますアクティビティ:

startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), 1);
于 2012-07-10T07:34:50.803 に答える
1

私の問題は、ロケーション マネージャーとロケーション リスナーの名前が変更時のロケーション コードで再定義されていたため、グローバル ステートメントで参照されるグローバルな名前ではないことでした。このコードを YouTube チュートリアルからコピーしましたが、他の多くの人も同じ問題を抱えていると思います。再定義を削除すると、画面を矢印で戻したときに GPS がほぼ瞬時にオフになります。実際、GPS はすぐに切れてしまうので、これは私が対処しなければならない問題です。

lm.removeUpdate(ll);を参照してください。アップデートをリリースしない

于 2012-07-17T02:13:21.320 に答える
0

これを onPause() で使用します

protected void onPause() 
{
    super.onPause();
    mylocaationoverlay.disableCompass();
    removeLocationUpdates();
}

これが removeLocationUpdates() になります

public void removeLocationUpdates()
{
    if(locationManager_ != null && myLocationListener_ != null)
        locationManager_.removeUpdates(myLocationListener_);
}

または、これを試してください: onPause で LocationManager を停止します

于 2012-07-10T06:56:28.797 に答える