OnPause停止GPS

时间:2012-07-10 05:48:04

标签: android

更新#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)是解决方案,但它无法正常工作。

---------------原帖-------------------------

我想添加一些OnPause代码来停止我的GPS更新。我已经厌倦了stackoverflow中至少十二个代码示例,无论是问题还是答案,都会在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
        } 
    }

我正在从网络上的示例中获取代码,但这些代码都不起作用。这是一个

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

我称之为lm并不重要,它给出了一个错误,它无法解决它。我使用哪个示例代码并不重要,它们都没有错误。

我必须做一些非常简单的事......

2 个答案:

答案 0 :(得分: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;  
}

答案 1 :(得分: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);
}