我在试着把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
}}
发布于 2011-12-13 15:19:05
我会设置两个全局变量纬度和经度。此变量将在每个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 );并且您的位置更改可能如下所示
@Override
public void onLocationChanged(Location loc) {
loc.getLatitude();
loc.getLongitude();
latitude = loc.getLatitude();
longitude = loc.getLongitude();
}发布于 2011-12-13 15:18:20
首先,我建议您先看看this article。
话虽如此,一般情况下,当你不需要更多的更新时,你应该“取消订阅”位置管理器。通常,只要您的活动处于“活动状态”,您就可以在"onCreate“中订阅位置更新,而在"onDestroy”中取消订阅。更好的做法是在你的活动分别可见或隐藏时订阅/取消订阅(分别通过"onResume"/"onPause“)。有关活动生命周期的详细信息,请查看here。
现在,关于你的具体问题,还不清楚你想要的行为是什么。是否要在每次位置更改时发送SMS消息?或者只在一段时间过去的时候?
假设你需要的是在你的位置改变时发送短信,但不是太频繁,我会建议如下: 1.在"onResume“中注册位置更新,并在"onPause”中取消注册。2.维护一些本地变量,这些变量可以告诉您最后一次发送短信是哪一次,其中的坐标是什么。这些变量可能会持久化活动生命周期事件(例如,当活动被销毁时,您应该“存储”这些值,并在重新创建它时恢复它们)。3.每当有新的位置更新时,检查是否太快或太近(与之前的SMS相比),如果没有,则更新变量。
话虽如此,请注意,只要您的活动可见,这将一直有效。如果您需要一个类似的功能,而不需要您保持Activity可见,我建议您使用BroadcastReceiver。
https://stackoverflow.com/questions/8485454
复制相似问题