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

//--- 渡された SMS メッセージを取得する ---

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

        }

//--- 新しい SMS メッセージを表示する ---

        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 のような SMS を受け取ったとします。これは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 に答える