0

更新#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 真的没关系,它会给出一个无法解决的错误。我使用哪个示例代码都没有关系,它们都没有错误。

我一定是在做一些非常愚蠢的事情......

4

2 回答 2

1

全局声明locationListener(在 Activity 的 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 回答