在Android上发送短信到达位置

时间:2017-03-17 16:08:36

标签: android android-broadcast android-location android-sms

我是android的绝对初学者。在这段代码中我想发送短信到达特定位置。如果我将Sms管理器放在onlocationchange()函数之外,我的应用程序崩溃。所以如果我没有从10米距离出来,它会发送连续的短信。我只想让它只发送一个短信。请帮忙!!

MainActivity.java

    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    txtLat = (TextView) findViewById(R.id.textview1);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    try {
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,10, this);
    } catch (SecurityException e)
    {
        txtLat = (TextView) findViewById(R.id.textview1);
        txtLat.setText("Security Exception");

    }
}

@Override
public void onLocationChanged(Location location) {
    txtLat = (TextView) findViewById(R.id.textview1);
    txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" + location.getLongitude());
    float dist1=getsignaldistance(location);
    tx=(TextView)findViewById((R.id.textview2));
    tx.setText("Distance for next signal:"+Float.toString(dist1)+"m");
    checksendsms(location);
}

private void checksendsms(Location location) {
    Location strpoint=new Location("strpoint");
    strpoint.setLatitude(location.getLatitude());
    strpoint.setLongitude(location.getLongitude());
    Location endpoint=new Location("endpoint");
    endpoint.setLatitude(10.813763);
    endpoint.setLongitude(78.644309);
    float dist=strpoint.distanceTo(endpoint);
    tx=(TextView)findViewById((R.id.textview3));
    tx.setText("Distance between points:"+Float.toString(dist)+"m");
    if(dist<=10.0)
    {
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phonenumber, null, message, null, null);
        finish();
    }

}

2 个答案:

答案 0 :(得分:0)

您好删除活动的onDestroy中的位置回调..

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    txtLat = (TextView) findViewById(R.id.textview1);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    try {
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,10, this);
    } catch (SecurityException e)
    {
        txtLat = (TextView) findViewById(R.id.textview1);
        txtLat.setText("Security Exception");

    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    locationManager.removeUpdates(this);
}


@Override
public void onLocationChanged(Location location) {
    txtLat = (TextView) findViewById(R.id.textview1);
    txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" + location.getLongitude());
    float dist1=getsignaldistance(location);
    tx=(TextView)findViewById((R.id.textview2));
    tx.setText("Distance for next signal:"+Float.toString(dist1)+"m");
    checksendsms(location);
}

private void checksendsms(Location location) {
    Location strpoint=new Location("strpoint");
    strpoint.setLatitude(location.getLatitude());
    strpoint.setLongitude(location.getLongitude());
    Location endpoint=new Location("endpoint");
    endpoint.setLatitude(10.813763);
    endpoint.setLongitude(78.644309);
    float dist=strpoint.distanceTo(endpoint);
    tx=(TextView)findViewById((R.id.textview3));
    tx.setText("Distance between points:"+Float.toString(dist)+"m");
    if(dist<=10.0)
    {
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phonenumber, null, message, null, null);
        finish();
    }

}

答案 1 :(得分:0)

您需要保留一个标志(布尔值),指示短信是否已被发送。

private boolean mHasSmsBeenSent = false; // <--- HERE

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    txtLat = (TextView) findViewById(R.id.textview1);

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    try {
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,10, this);
    } catch (SecurityException e)
    {
        txtLat = (TextView) findViewById(R.id.textview1);
        txtLat.setText("Security Exception");

    }
}

@Override
public void onLocationChanged(Location location) {
    txtLat = (TextView) findViewById(R.id.textview1);
    txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" + location.getLongitude());
    float dist1=getsignaldistance(location);
    tx=(TextView)findViewById((R.id.textview2));
    tx.setText("Distance for next signal:"+Float.toString(dist1)+"m");
    if(!mSmsHasBeenSent) {        // <-- HERE
        checksendsms(location);
    }
}

private void checksendsms(Location location) {
    Location strpoint=new Location("strpoint");
    strpoint.setLatitude(location.getLatitude());
    strpoint.setLongitude(location.getLongitude());
    Location endpoint=new Location("endpoint");
    endpoint.setLatitude(10.813763);
    endpoint.setLongitude(78.644309);
    float dist=strpoint.distanceTo(endpoint);
    tx=(TextView)findViewById((R.id.textview3));
    tx.setText("Distance between points:"+Float.toString(dist)+"m");
    if(dist<=10.0)
    {
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phonenumber, null, message, null, null);
        mHasSmsBeenSent = true; // <--- HERE
        finish();
    }

}