我真的试图寻找代码和信息,事实上我的代码部分基于该站点的其他问题和答案。尽管如此,我不知道我做错了什么。此代码位于后台服务中。我尝试使用此代码执行的操作基本上是以 gpsTimeValue 为周期发送带有您基于 GPS 的位置的 SMS。我知道 Thread.sleep(time) 不是测量时间的准确方法,但这并不重要。
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)) 祝酒)都会显示。我在电话中看到该位置是如何以某种方式被激活的(我想是因为监听器设置),但没有发送任何消息,也没有产生位置。我已经尝试过 requestLocationUpdates 和 requestSingleUpdate。
其中,我在清单中拥有与此代码相关的权限,如下所示:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
我的应用程序中所有代码的所有其他部分都像一个魅力,除了这个。这让我发疯,我不知道如何解决它。拜托,任何建议都将受到欢迎。谢谢。