停止位置管理器更新

问题描述:

我正在尝试将GPS坐标发送到短信。此代码有效,但每次GPS更新位置时,都会尝试发送新的文本消息。我无法弄清楚如何停止位置更新。这是我目前的...我意识到它可能不是最有效的方式来做到这一点。停止位置管理器更新

任何帮助,将不胜感激!

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    LocationListener mlocListener = new MyLocationListener(); 
    mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 

} 

public void GPSDisable() { 
    LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    LocationListener mlocListener = new MyLocationListener(); 
    mlocManager.removeUpdates(mlocListener); 
} 

public class MyLocationListener implements LocationListener { 

    @Override 

    public void onLocationChanged(Location loc) { 

     loc.getLatitude(); 
     loc.getLongitude(); 

     double latitude = loc.getLatitude(); 
     double longitude = loc.getLongitude(); 

     Intent smsIntent = new Intent(Intent.ACTION_VIEW); 
     smsIntent.setType("vnd.android-dir/mms-sms"); 
     smsIntent.putExtra("address", "5555555555"); 
     smsIntent.putExtra("sms_body", "Location:"+latitude+","+longitude); 
     GPSDisable(); 
     startActivity(smsIntent); 

    } 


    @Override 

    public void onStatusChanged(String provider, int status, Bundle extras) 

    { 

    } 


    @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 onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 

} 

@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 

} 

}

+0

,如果你停止了更新比你如何发送消息的位置。 LocationListener实现了位置更新事件,只要位置发生变化,onLocationChange()就会被调用 – Pratik

我会设置两个全局变量的纬度和经度。 这个变量会每onLocationChanged更新一次。你不能改变这种方式,但你可以从那里发送短信。

我会在5秒后发送一个定时器的短信让我们说。

new java.util.Timer().schedule( 
    new java.util.TimerTask() { 
     @Override 
     public void run() { 
      Intent smsIntent = new Intent(Intent.ACTION_VIEW); 
    smsIntent.setType("vnd.android-dir/mms-sms"); 
    smsIntent.putExtra("address", "5555555555"); 
    smsIntent.putExtra("sms_body", "Location:"+latitude+","+longitude); 

    startActivity(smsIntent); 
     } 
    }, 
    5000); 

而且你onlocation改变可能看起来像这样

@Override 
public void onLocationChanged(Location loc) { 
    loc.getLatitude(); 
    loc.getLongitude(); 

    latitude = loc.getLatitude(); 
    longitude = loc.getLongitude(); 


} 
+0

实际上,我想要的是在建立位置修复后发送文本消息。我能够通过遵循另一个教程在... http://www.hrupin.com/2011/04/android-gps-using-how-to-get-current-location-example 但其他答复也很有帮助,特别是Dany使用计时器,这将帮助我进行类似的项目。谢谢。 – AndroidNoobie

首先,我建议你看看this article

话虽如此,一般来说,当你不需要更多更新时,你应该从位置管理器“取消订阅”。通常情况下,只要活动处于“活动状态”,当您需要更新时,您就可以在“onCreate”中订阅位置更新并在“onDestroy”中取消订阅。 更好的是当你的活动分别变得可见或隐藏时(分别通过“onResume”/“onPause”)来订阅/取消订阅。有关活动生命周期的详细信息,请参阅here

现在,关于您的具体问题,目前尚不清楚您期望的行为是什么。每次地点变化时你想发送一条短信吗?或者只有当一段时间过去了?

假设你需要发送短信,只要你的位置发生变化,但不会太频繁,我会建议如下: 1.在“onResume”中注册位置更新并在“onPause”中取消注册。 2.保留一些局部变量,告诉你哪一次是你最近一次发送SMS消息,以及它的坐标是什么。这些变量可能会持续存在Activity生命周期事件(例如,当Activity被销毁时,您应该“存储”这些值,并在重新创建时将其恢复)。 3.每当有新的位置更新时,检查它是否过早或过于接近(与以前的SMS相比),如果不发送另一条消息,则更新变量。

说了这些之后,请注意,只要您的活动可见,此功能就会起作用。如果你需要一个类似的功能,不需要你保持活动可见,我建议你使用BroadcastReceiver。