调用 locationmanager.removeupdates 会在 android 中永久删除它吗?
does calling locationmanager.removeupdates permanently removes it in android?
我正在创建一个应用程序,如果手机以一分钟为间隔移动,则通过短信发送纬度和经度。
在 ArrayList 达到发送 SMS 的六个元素后,我使用 ArrayList
保存六个 LatLngs
。如果设备在六分钟内停止移动,则 ArrayList
将小于六。如果设备在 20 分钟内没有移动,则它会发送未填充的 ArrayList。我使用 CountdownTimer
来实现这一点。
它工作正常,只要我移动它就会发送 LatLngs
。但是,如果我在 ArrayList 填满之前停止,它会在 20 分钟后发送 ArrayList。这不是问题。但是,之后它会以一分钟的间隔继续发送短信。我的密码是
private void sendLog() {
Toast.makeText(MainPage.this,"Sending Log",Toast.LENGTH_LONG).show();
final SharedPreferences account=getSharedPreferences("admins", MODE_PRIVATE);
String interval=account.getString("lti", "");
int timeInterval=Integer.parseInt(interval);
final LocationManager logManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
logManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, timeInterval * 60000, 100, new LocationListener() {
@Override
public void onLocationChanged(final Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
DecimalFormat dFormat = new DecimalFormat("#.####");
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("kk:mm");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM,yy");
String time = sdf.format(date);
final String dateLog = sdf1.format(date);
loglist.add("!+" + dFormat.format(latitude) + ",+" + dFormat.format(longitude) + "," + time);
Toast.makeText(MainPage.this, loglist.toString(), Toast.LENGTH_SHORT).show();
CountDownTimer countDownTimer = new CountDownTimer(1200000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
if (loglist.size() == 6) {
for (int j = 0; j < loglist.size(); j++) {
log.append(loglist.get(j).toString());
}
Toast.makeText(MainPage.this, log.toString(), Toast.LENGTH_SHORT).show();
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(logPreferences.getString("admin1", ""), null, " " + log.toString() + "!" + dateLog + "!", null, null);
loglist.removeAll(loglist);
log.setLength(0);
}
}
@Override
public void onFinish() {
if (loglist.size()<6) {
for (int j = 0; j < loglist.size(); j++) {
log.append(loglist.get(j).toString());
}
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(logPreferences.getString("admin1", ""), null, " " + log.toString() + "!" + dateLog + "!", null, null);
loglist.removeAll(loglist);
log.setLength(0);
}
}
}.start();
}
我想打电话给logManaager.removeupdates()
。这是否导致locationUpdates
无法再次调用。因为我希望设备在移动时发送。帮帮我。
您对调用 logManager.removeUpdates()
的直觉是正确的。
调用 removeUpdates()
后,您可以再次请求更新。
我正在创建一个应用程序,如果手机以一分钟为间隔移动,则通过短信发送纬度和经度。
在 ArrayList 达到发送 SMS 的六个元素后,我使用 ArrayList
保存六个 LatLngs
。如果设备在六分钟内停止移动,则 ArrayList
将小于六。如果设备在 20 分钟内没有移动,则它会发送未填充的 ArrayList。我使用 CountdownTimer
来实现这一点。
它工作正常,只要我移动它就会发送 LatLngs
。但是,如果我在 ArrayList 填满之前停止,它会在 20 分钟后发送 ArrayList。这不是问题。但是,之后它会以一分钟的间隔继续发送短信。我的密码是
private void sendLog() {
Toast.makeText(MainPage.this,"Sending Log",Toast.LENGTH_LONG).show();
final SharedPreferences account=getSharedPreferences("admins", MODE_PRIVATE);
String interval=account.getString("lti", "");
int timeInterval=Integer.parseInt(interval);
final LocationManager logManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
logManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, timeInterval * 60000, 100, new LocationListener() {
@Override
public void onLocationChanged(final Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
DecimalFormat dFormat = new DecimalFormat("#.####");
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("kk:mm");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM,yy");
String time = sdf.format(date);
final String dateLog = sdf1.format(date);
loglist.add("!+" + dFormat.format(latitude) + ",+" + dFormat.format(longitude) + "," + time);
Toast.makeText(MainPage.this, loglist.toString(), Toast.LENGTH_SHORT).show();
CountDownTimer countDownTimer = new CountDownTimer(1200000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
if (loglist.size() == 6) {
for (int j = 0; j < loglist.size(); j++) {
log.append(loglist.get(j).toString());
}
Toast.makeText(MainPage.this, log.toString(), Toast.LENGTH_SHORT).show();
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(logPreferences.getString("admin1", ""), null, " " + log.toString() + "!" + dateLog + "!", null, null);
loglist.removeAll(loglist);
log.setLength(0);
}
}
@Override
public void onFinish() {
if (loglist.size()<6) {
for (int j = 0; j < loglist.size(); j++) {
log.append(loglist.get(j).toString());
}
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(logPreferences.getString("admin1", ""), null, " " + log.toString() + "!" + dateLog + "!", null, null);
loglist.removeAll(loglist);
log.setLength(0);
}
}
}.start();
}
我想打电话给logManaager.removeupdates()
。这是否导致locationUpdates
无法再次调用。因为我希望设备在移动时发送。帮帮我。
您对调用 logManager.removeUpdates()
的直觉是正确的。
调用 removeUpdates()
后,您可以再次请求更新。