1

我真的试图寻找代码和信息,事实上我的代码部分基于该站点的其他问题和答案。尽管如此,我不知道我做错了什么。此代码位于后台服务中。我尝试使用此代码执行的操作基本上是以 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"/> 

我的应用程序中所有代码的所有其他部分都像一个魅力,除了这个。这让我发疯,我不知道如何解决它。拜托,任何建议都将受到欢迎。谢谢。

4

1 回答 1

0

这必须帮助您通过消息获取位置详细信息

locationText = location.getLatitude() + "," + location.getLongitude();

smsManager.sendTextMessage(phoneNo, null, locationText, null, null);

于 2014-04-24T13:21:17.230 回答