通过单个SMS发送设备GPS位置

时间:2013-07-16 03:48:15

标签: android gps sms location locationmanager

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

我的应用程序中所有代码的其他部分都像魅力一样,除此之外。它让我疯狂,我不知道如何解决它。请接受任何建议。感谢。

1 个答案:

答案 0 :(得分:0)

这必须帮助您通过消息

获取位置详细信息

locationText = location.getLatitude()+“,”+ location.getLongitude();

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