0

更新#2。私の最初の質問は、答えてくれた2人の優しさによって解決されました. どうやら、結果のコードが実行中に GPS を停止しないという事実について、新しい質問を開始する必要があるようです。しかし、今はエラーがないので、方法がわかれば解決済みとしてマークします:-)

アップデート。

コメントのおかげで「機能する」コードがありますが、唯一の問題は、本来の機能を実行しないことです。エラーがないという点で動作しています。

機能させるために、これをアクティビティの上部にグローバルに追加しました。

    protected LocationListener ll;
protected LocationManager lm;

そして、このOnPauseコードを使用しました

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

すべてが電話でコンパイルおよび実行されます。GPS 位置情報が表示されます。問題は、アプリケーションを終了した後にバッテリーが切れないように、目的が GPS をオフにすることであるということです。しかし、GPS はオンのままです。これは一般的な苦情であり、回答がありません。lm.removeUpdates(ll) が解決策だと思いましたが、機能していません。

--------------- 元の投稿 --------------------------

GPS の更新を停止する OnPause コードを追加したいと考えています。私は質問と回答の両方のstackoverflowからのコードの少なくとも1ダースの例にうんざりしており、すべてEclipseでエラーを出しています。

私の GPS コードはここにあります (正常に動作します):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textLat = (TextView)findViewById(R.id.textLat);
    textLong = (TextView)findViewById(R.id.textLong);
    textTimex = (TextView)findViewById(R.id.textTimex);
    LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    LocationListener ll = new mylocationlistener();
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
}
    class mylocationlistener implements LocationListener{

        @Override
        public void onLocationChanged(Location location) {
            if (location != null)
            {
                double pLat = location.getLatitude();
                double pLong = location.getLongitude();
                long pTime = location.getTime();
                DecimalFormat df = new DecimalFormat("#.######");
                textLat.setText(df.format(pLat));
                textLong.setText(df.format(pLong));
                textTimex.setText(Long.toString(pTime));
                //textTimex.setText(Long.toString(pTime));
                //textTimex.setText(df.format(pLong));
            }
        }

        @Override
        public void onProviderDisabled(String provider) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onProviderEnabled(String provider) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onStatusChanged(String provider, int status,
                Bundle extras) {
            // TODO Auto-generated method stub
        } 
    }

Web 上の例からコードを取得していますが、どれも機能しません。これが1つです

@Override
public void onPause() {
    lm.removeUpdates(locationListener);
    super.onPause();
}

私が lm と呼んでいるものは問題ではありません。解決できないというエラーが表示されます。どのサンプル コードを使用しても問題ありません。エラーのないコードはありません。

私は非常に単純に愚かなことをしているに違いない...

4

2 に答える 2

1

locationListenerグローバルに(アクティビティの onCreate メソッドの外側で)次のように宣言します。

    LocationListener ll;
     @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ////your code...
       ll = new mylocationlistener();
       ////your code..
    }


   @Override protected void onPause() 
 { 
  super.onPause();
   // TODO Auto-generated method stub 
   System.out.println("a intrat in onPause()"); 
  if(lm != null) { 
    lm.removeUpdates(ll); 
  } 
  ll = null; 
  lm = null;  
}
于 2012-07-10T05:51:10.550 に答える
0

使用しようとしている変数は、onCreate のスコープでのみ表示されます。メンバー変数を使用する必要があります。

クラスに次のものが必要です。

protected LocationListener ll;
protected LocationManager lm; 

次に、ll の前に LocationListener を削除し、ll を onPause コードに使用するだけです。lm とタイプ LocationManager についても同じです。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textLat = (TextView)findViewById(R.id.textLat);
    textLong = (TextView)findViewById(R.id.textLong);
    textTimex = (TextView)findViewById(R.id.textTimex);
    lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
    ll = new mylocationlistener();
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
}
于 2012-07-10T05:53:43.443 に答える