如何从收到的短信息中提取经纬度?

时间:2014-02-05 15:02:53

标签: google-maps sms extract latitude-longitude google-latitude

这是我接收消息的活动的完整代码。有没有其他方法可以从收到的消息中提取经度和纬度?

package com.winzoque.android.tracker;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;

public class SMSReceiver extends BroadcastReceiver
{

@Override
public void onReceive(Context context, Intent intent)
{

// ---获取传递的短信---

    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs = null;
    String str = "";
    String lat = "";
    String lon = "";
    if (bundle != null)
    {

// ---检索收到的消息---

        Object[] pdus = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];
        for (int i=0; i<msgs.length; i++)
        {
            msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
            str += msgs[i].getMessageBody().toString();
            str += "\n";

// ---我在这里使用了子字符串代码,但它对于获取经度和纬度没有用,因为经度和纬度数组会随着地点的变化而不断变化。

这是我需要帮助的部分,或者如果你有任何我可以使用的建议。我想过使用“拆分”,但我不知道它是如何工作的。

            lat = str.substring(0, 11);
            lon = str.substring(12, 23);

        }

// ---显示新短信---

        Toast.makeText(context, str, Toast.LENGTH_SHORT).show();

// ---这部分是发送广播意图来更新活动中收到的消息---

        Intent broadcastIntent = new Intent();
        broadcastIntent.setAction("SMS_RECEIVED_ACTION");
        broadcastIntent.putExtra("sms", lat);
        broadcastIntent.putExtra("sms1", lon);
        context.sendBroadcast(broadcastIntent);

    }
}
}

1 个答案:

答案 0 :(得分:0)

作为一个简单的例子,我假设你得到这样的短信:31.415922; -27.18281。在您处理传入的短信后,这将在您的String str中。 (你应该摆脱这一行:str += "\n";。)然后:

String[] coords = str.split(";");
String lat = coords[0];
String lon = coords[1];

在此之后,String lat将包含值“31.415922”,String lon将包含“-27.18281”。