我真的试图寻找代码和信息,事实上我的代码部分基于此网站的其他问题和答案。尽管如此,我不知道我做错了什么。 此代码位于后台服务中。我尝试使用此代码基本上是以gpsTimeValue的周期发送基于GPS的位置的短信。我知道Thread.sleep(时间)不是衡量时间的准确方法,但并不重要。
if (locateMode)
// start location manager
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// entering locate mode
while (locateMode) {
handler.post(new DisplayToast("Entering locate mode"));
// check value of sleep time
gpsTimeValue = Integer.parseInt(pref.getString("gps_time_value", getString(R.string.gpsTimeDefault))) * 6000;
// update notification
msg = "Starting GPS cycle with " + gpsTimeValue;
handler.post(new DisplayToast(msg));
notificationBuilder.setContentText(msg);
notificationManager.notify(notificationId,
notificationBuilder.build());
// send location sms
sendLocationSMS(pref.getString("send_to_number", ""),locationManager);
// sleep
try {
Thread.sleep(gpsTimeValue);
} catch (InterruptedException e) {
e.printStackTrace();
}
// check location mode
if (pref.getString("locate_mode", "OFF").equalsIgnoreCase("OFF")) {
locateMode = false;
handler.post(new DisplayToast("Exiting locate mode"));
}
}
这是sendLocationSMS的代码。我想明确基于GPS的位置:
private void sendLocationSMS(final String sendToNumber,
LocationManager locationManager) {
handler.post(new DisplayToast("Seting up SMS to number: "+ sendToNumber));
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the listener
String loc = location.toString();
String message = "Location" + loc;
handler.post(new DisplayToast(message));
if (!sendToNumber.isEmpty()) {
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(
sendToNumber, null,message,null, null);
}
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status,Bundle extras) {}
};
//locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
0,0, locationListener);
locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, locationListener, null);
}
因此,除了onLocationChange中的代码之外,每个toast(我使用handler.post(newDisplay(message))toast)都会显示。我在手机中看到位置是如何以某种方式激活的(我想是因为监听器设置)但没有发送消息而且没有产生位置。我尝试过requestLocationUpdates和requestSingleUpdate。
除此之外,我在清单中拥有与此代码相关的权限,如下所示:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
我的应用程序中所有代码的其他部分都像魅力一样,除此之外。它让我疯狂,我不知道如何解决它。请接受任何建议。感谢。
答案 0 :(得分:0)
这必须帮助您通过消息
获取位置详细信息locationText = location.getLatitude()+“,”+ location.getLongitude();
smsManager.sendTextMessage(phoneNo,null,locationText,null,null);