2012-07-10 75 views
0

UPDATE#2。我最初的问题是由两位回答者的善意解决的。显然,我需要开始一个新的问题,即运行结果代码不会停止GPS。但现在没有错误,所以我会将此标记为已解决,如果我知道如何:-)OnPause停止GPS

UPDATE。

我有“工作”代码感谢评论唯一的问题是,它没有做它应该做的。它的工作原理是没有错误。

为了使它工作,我在活动的顶部添加了全局。

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更新。我已经厌倦了至少12个来自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,它给出了一个错误,它无法解决它。我使用哪个示例代码并不重要,它们都不是无错的。

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

回答

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; 
} 
+0

如果我在全局声明ll和lm,应用程序将编译并运行,但当我退出该活动时会崩溃。我拥有的是@Override public void onPause(){ lm.removeUpdates(ll); } – 2012-07-10 05:57:39

+0

@AllenEdwards:你可以在应用程序崩溃时提供日志 – 2012-07-10 06:01:25

+0

@AllenEdwards:尝试使用'public void onPause(){ super。的onPause(); lm.removeUpdates(ll); }' – 2012-07-10 06:04:51

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); 
} 
+0

不确定你到底在说什么,但我添加了受保护的LocationListener ll;和lm相同,并将我的OnPause代码更改为另一个示例,并且不会崩溃。它也不会关闭GPS。 @Override 保护无效的onPause(){// TODO自动生成方法存根 的System.out.println( “在的onPause()一个intrat”); 如果(LM!= NULL){ lm.removeUpdates(LL); } ll = null; lm = null; super.onPause(); } – 2012-07-10 06:07:13