这是我接收消息的活动的完整代码。有没有其他方法可以从收到的消息中提取经度和纬度?
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);
}
}
}
答案 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”。