Android 当gps位置可用时自动发送短信

Android 当gps位置可用时自动发送短信,android,gps,smsmanager,Android,Gps,Smsmanager,我正在开发一个应用程序,在固定时间后通过短信发送用户位置,如果手机重新启动,该应用程序将在后台自动启动,而无需任何启动活动。我已经安静地完成了我的任务,我只是在获取位置方面遇到了问题,因为gps需要一些时间,当它找不到任何位置时,应用程序就会崩溃。 这是我的主要活动代码 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState)

我正在开发一个应用程序,在固定时间后通过短信发送用户位置,如果手机重新启动,该应用程序将在后台自动启动,而无需任何启动活动。我已经安静地完成了我的任务,我只是在获取位置方面遇到了问题,因为gps需要一些时间,当它找不到任何位置时,应用程序就会崩溃。 这是我的主要活动代码

public class MainActivity extends Activity {

 @Override
    public void onCreate(Bundle savedInstanceState) 
     {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

    startLocationTracking();
}

}

}


在逻辑上我有点困惑,我希望我的应用程序在gps坐标可用时发送短信。如果手机上的gps处于禁用状态,则手机上的网络可用,则应通过网络获取位置并通过网络发送

您可以使用android.telephony软件包发送短信。您可以在此处查看如何添加到项目:

类似于此,您可以发送短信:

SmsManager sms = SmsManager.getDefault();

sms.sendTextMessage(phoneNumber, scAddress, texto, null, null);
希望它能帮助你

编辑

您的应用程序正在崩溃,因为在重新启动后GPS/网络将首次没有lastknowlocation,因为

Location location = locationManager.getLastKnownLocation(provider);
在这一行中,您将接收空位置

String Text = "Latitude = " + location.getLatitude() +" Longitude = " + location.getLongitude() + " Device Id: " + device_id;
在这一行中,您将得到空指针异常,因为
location.getLatitude()
是不可能的

所以在此代码之前,请尝试检查位置=空

if(location!=null){
     String Text = "Latitude = " + location.getLatitude() +" Longitude = " + location.getLongitude() + " Device Id: " + device_id;
}
使用此方法可以了解GPS可用性的状态

public boolean isgpsavailable(Activity activity) {
        LocationManager locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE);
        boolean result = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        return result;
}

然后把你的代码放到一个
if(isgpsavaailable(this)){…}
语句中

我有发送MSG的方法。你能描述一下if()语句中的一些行吗。
if(location!=null){
     String Text = "Latitude = " + location.getLatitude() +" Longitude = " + location.getLongitude() + " Device Id: " + device_id;
}
public boolean isgpsavailable(Activity activity) {
        LocationManager locationManager = (LocationManager) activity.getSystemService(Context.LOCATION_SERVICE);
        boolean result = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
        return result;
}