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