首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止LocationManager更新

停止LocationManager更新
EN

Stack Overflow用户
提问于 2011-12-13 14:57:31
回答 2查看 734关注 0票数 0

我在试着把GPS坐标发到短信里。这段代码可以工作,但每次GPS更新位置时,它都会尝试发送一条新的文本消息。我想不出怎么阻止位置更新。这就是我目前所拥有的……我意识到这可能不是最有效的方式。

任何帮助都将不胜感激!

代码语言:javascript
复制
  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

}

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-13 15:19:05

我会设置两个全局变量纬度和经度。此变量将在每个onLocationChanged中更新。你不能更改这个协议,但是你可以从那里开始发送短信。

比方说,我会在5秒后定时发送短信。

代码语言:javascript
复制
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 );

并且您的位置更改可能如下所示

代码语言:javascript
复制
 @Override
public void onLocationChanged(Location loc) {
    loc.getLatitude();
    loc.getLongitude();

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


}
票数 0
EN

Stack Overflow用户

发布于 2011-12-13 15:18:20

首先,我建议您先看看this article

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

现在,关于你的具体问题,还不清楚你想要的行为是什么。是否要在每次位置更改时发送SMS消息?或者只在一段时间过去的时候?

假设你需要的是在你的位置改变时发送短信,但不是太频繁,我会建议如下: 1.在"onResume“中注册位置更新,并在"onPause”中取消注册。2.维护一些本地变量,这些变量可以告诉您最后一次发送短信是哪一次,其中的坐标是什么。这些变量可能会持久化活动生命周期事件(例如,当活动被销毁时,您应该“存储”这些值,并在重新创建它时恢复它们)。3.每当有新的位置更新时,检查是否太快或太近(与之前的SMS相比),如果没有,则更新变量。

话虽如此,请注意,只要您的活动可见,这将一直有效。如果您需要一个类似的功能,而不需要您保持Activity可见,我建议您使用BroadcastReceiver。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8485454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档