1

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

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);

    }
}
}
4

1 回答 1

0

作为一个简单的例子,我假设你收到的短信是这样的:31.415922;-27.18281。这将在您String str处理传入的 SMS 后出现。(你应该去掉这条线:str += "\n";。)然后:

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

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

于 2014-02-08T11:49:03.417 回答