更新#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并不重要,它给出了一个错误,它无法解决它。我使用哪个示例代码并不重要,它们都没有错误。
我必须做一些非常简单的事......
答案 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);
}