我正在开发一个应用,在固定时间后通过SMS
发送用户位置。
我几乎完成了我的任务。我只是在GPS
位置未发送SMS
时才会遇到问题,但是当我在GPS
时,发送的短信无效。
String myAddress = "";
List<Address> location;
private void getAddress() {
// TODO Auto-generated method stub
try {
startService(new Intent(mContext,GPSTracker.class));
GPSTracker tracker = new GPSTracker(mContext);
location = tracker.getGeocoderAddress(mContext);
if (tracker.canGetLocation() == false)
{
tracker.showSettingsAlert();
}
else
{
GlobalValues.location_home_lat = tracker.getLongitude();
GlobalValues.location_home_lng = tracker.getLatitude();
}
if(location != null) {
Address returnedAddress = location.get(0);
StringBuilder strReturnedAddress = new StringBuilder("location:\t");
for(int i=0; i<returnedAddress.getMaxAddressLineIndex(); i++) {
strReturnedAddress.append(returnedAddress.getAddressLine(i)).append("\n");
}
myAddress = strReturnedAddress.toString();
}
private void countdownStart() {
// TODO Auto-generated method stub
detectionStart.setBase(SystemClock.elapsedRealtime());
detectionStart.start();
detectionStart.setOnChronometerTickListener(new OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
// TODO Auto-generated method stub
long elapsedMillis = SystemClock.elapsedRealtime() - detectionStart.getBase();
Date date = new Date(elapsedMillis);
DateFormat formatter = new SimpleDateFormat("s");
String dateFormatted = formatter.format(date);
detectionStart.setText(dateFormatted);
if(elapsedMillis>THRESHOLD){
if(userNumber.length()>0 && message.length()>0){
sendSms(userNumber,message);
}
else{
Toast.makeText(getBaseContext(),
"Error in sendind sms",
Toast.LENGTH_SHORT).show();
}
stopAlarm();
onCloseActivity();
goMainActivity();
}
}
});
}
protected void sendSms(String number, String message) {
// TODO Auto-generated method stub
String SENT = "android.telephony.SmsManager.STATUS_ON_ICC_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(DoorbellDetectedActivity.this, 0,
new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(DoorbellDetectedActivity.this, 0,
new Intent(DELIVERED), 0);
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(userNumber, null, message, null, null);
}
答案 0 :(得分:0)
可能你做错了。倒数计时器从哪里开始?您应该只在获得位置时发送短信。这意味着您应该将代码移动到GPS跟踪类的onlocationchanged()回调中。请重新查看代码,您的SMS发送逻辑与位置回调无关,而是与计时器绑定。
答案 1 :(得分:0)
final LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
final LocationListener mlocListener = new MyLocationListener();
final Location location = mlocManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
updateWithNewLocation(location);
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
mc=mapview.getController();
mc.setZoom(18);
mlo=new MyLocationOverlay(this,mapview);
mapview.getOverlays().add(mlo);
mapview.invalidate();
}
public class MyLocationListener implements LocationListener
{
public void onLocationChanged(final Location location)
{
updateWithNewLocation(location);
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
private void updateWithNewLocation(final Location location)
{
mapview=(MapView) findViewById(R.id.map);
String latLongString;
TextView myLocationText;
myLocationText = (TextView)findViewById(R.id.text);
String addressString = "No address found";
if ( location != null )
{
final double lat = location.getLatitude();
final double lng = location.getLongitude();
latLongString = "Lat:" + lat + "\nLong:" + lng;
final double latitude = location.getLatitude();
final double longitude = location.getLongitude();
addressString = String.format("%f, %f", latitude, longitude);
}
catch ( final IOException e )
{
System.err.println(e.toString());
}
}
else
{
latLongString = "No location found";
}
myLocationText.setText("Your Current Position is:\n" +
addressString);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater inf = getMenuInflater();
inf.inflate(R.menu.newmenu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
String tv1;
TextView myLocationText;
myLocationText = (TextView)findViewById(R.id.text);
tv1= myLocationText.getText().toString();
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("sms_body", tv1);
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);
return(super.onOptionsItemSelected(item));
}
希望有所帮助