如何通过短信接收坐标并在谷歌地图中显示。。。。在android中

如何通过短信接收坐标并在谷歌地图中显示。。。。在android中,android,google-maps,broadcastreceiver,sms,coordinates,Android,Google Maps,Broadcastreceiver,Sms,Coordinates,我正在尝试将坐标从一部手机发送到另一部手机,当按下按钮时,发送者发送其坐标。。。。。接收者也在接收这些坐标,但没有在谷歌地图上显示,我不知道问题出在哪里(但我认为广播接收器内的意图没有启动,因为上面显示的是toast) 我的主要活动:-(从我成功发送短信的地方) /*------------获取坐标的侦听器类----------------*/ 私有类MyLocationListener实现LocationListener{ @凌驾 位置更改后的公共无效(位置loc){ editLocation

我正在尝试将坐标从一部手机发送到另一部手机,当按下按钮时,发送者发送其坐标。。。。。接收者也在接收这些坐标,但没有在谷歌地图上显示,我不知道问题出在哪里(但我认为广播接收器内的意图没有启动,因为上面显示的是toast)

我的主要活动:-(从我成功发送短信的地方)

/*------------获取坐标的侦听器类----------------*/
私有类MyLocationListener实现LocationListener{
@凌驾
位置更改后的公共无效(位置loc){
editLocation.setText(“”);
pb.setVisibility(视图不可见);
Toast.makeText(getBaseContext(),“位置已更改:Lat:”+
loc.getLatitude()+“Lng:+loc.getLatitude(),
吐司。长度(短)。show();
//用于显示定位方法
纬度=loc.getLatitude();
经度=loc.getLongitude();
//
String longitude=“longitude:+loc.getLongitude();
Log.v(标签、经度);
String latitude=“latitude:+loc.getLatitude();
对数v(标签、纬度);
/*----------从坐标中获取城市名称----------------*/
字符串cityName=null;
Geocoder gcd=新的地理编码器(getBaseContext(),Locale.getDefault());
列出地址;
试一试{
地址=gcd.getFromLocation(loc.getLatitude(),loc.getLatitude(),1);
如果(地址.size()>0)
System.out.println(addresses.get(0.getLocality());
cityName=addresses.get(0.getLocality();
}捕获(IOE异常){
e、 printStackTrace();
}
字符串s=经度+“\n”+纬度+”\n\n我的当前城市是:“+cityName;
editLocation.setText;
字符串phoneNumber=“+xxxxxxxxx”;
//发短信
意向意向=新意向(Intent.ACTION_视图,Uri.parse(“sms:+phoneNumber”);
intent.putExtra(“sms_body”,loc.getLongitude()+”\n“+loc.getLatitude());
星触觉(意向);
我的广播接收器类如下:-(当收到短信时,下面的代码确实会显示带坐标的土司以及所有内容,但为什么它没有在谷歌地图中显示,我不知道…..在taost语句后,它的行为就像它不工作一样…..我只想在土司显示后,谷歌地图打开并显示这些坐标

package com.example.mishaal.samplegetcoordinates;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

import java.util.Scanner;

public class SmsBroadcastReceiver extends BroadcastReceiver {
    final SmsManager sms = SmsManager.getDefault();
    public static final String SMS_CONTENT = "sms_content";
    public String longitude,latitude;
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        final Bundle bundle = intent.getExtras();
        try
        {
            if(bundle != null)
            {
                final Object[] pduObjects = (Object[]) bundle.get("pdus");
                for (int i=0; i<pduObjects.length; i++)
                {
                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pduObjects[i]);
                    String number = currentMessage.getDisplayOriginatingAddress();
                    String message = currentMessage.getDisplayMessageBody();
                    //Toast.makeText(context,"without executing if statement" , Toast.LENGTH_LONG).show();

                    Scanner scanner = new Scanner(message);
                    latitude=scanner.nextLine();
                    longitude=scanner.nextLine();
                    scanner.close();
                    Toast.makeText(context,"Sender No:" + number + "\nMessage " + message , Toast.LENGTH_LONG).show();
                    intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse("geo:0,0?q=" + ("" + latitude + "," + longitude + "")));
                    try {
                        context.startActivity(intent);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                   }
            }
        }
        catch (Exception e) {
            Log.e("SmsReceiver", "Exception smsReceiver" + e);
        }
    }
}
package com.example.mishaal.samplegetcoordinates;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.net.Uri;
导入android.os.Bundle;
导入android.telephony.smsmsmanager;
导入android.telephony.sms消息;
导入android.util.Log;
导入android.widget.Toast;
导入java.util.Scanner;
公共类SmsBroadcastReceiver扩展广播接收器{
final smsmsmanager sms=smsmsmanager.getDefault();
公共静态最终字符串SMS\u CONTENT=“SMS\u CONTENT”;
公共字符串经度、纬度;
@凌驾
公共void onReceive(上下文、意图){
//TODO:当BroadcastReceiver正在接收时调用此方法
//有意图的广播。
final Bundle=intent.getExtras();
尝试
{
if(bundle!=null)
{
最终对象[]pduObjects=(对象[])bundle.get(“PDU”);

对于(int i=0;i一旦您收到坐标作为祝酒词,您需要解析它们并发送一个意向请求,以便在谷歌地图应用程序中打开

创建意图后,您可以通过多种方式请求系统启动相关应用程序。常用方法是将意图传递给startActivity()方法。系统将启动必要的应用程序(在本例中为Google Maps),并启动相应的活动

请阅读上的官方文档

package com.example.mishaal.samplegetcoordinates;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

import java.util.Scanner;

public class SmsBroadcastReceiver extends BroadcastReceiver {
    final SmsManager sms = SmsManager.getDefault();
    public static final String SMS_CONTENT = "sms_content";
    public String longitude,latitude;
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        final Bundle bundle = intent.getExtras();
        try
        {
            if(bundle != null)
            {
                final Object[] pduObjects = (Object[]) bundle.get("pdus");
                for (int i=0; i<pduObjects.length; i++)
                {
                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pduObjects[i]);
                    String number = currentMessage.getDisplayOriginatingAddress();
                    String message = currentMessage.getDisplayMessageBody();
                    //Toast.makeText(context,"without executing if statement" , Toast.LENGTH_LONG).show();

                    Scanner scanner = new Scanner(message);
                    latitude=scanner.nextLine();
                    longitude=scanner.nextLine();
                    scanner.close();
                    Toast.makeText(context,"Sender No:" + number + "\nMessage " + message , Toast.LENGTH_LONG).show();
                    intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse("geo:0,0?q=" + ("" + latitude + "," + longitude + "")));
                    try {
                        context.startActivity(intent);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                   }
            }
        }
        catch (Exception e) {
            Log.e("SmsReceiver", "Exception smsReceiver" + e);
        }
    }
}
// Create a Uri from an intent string. Use the result to create an Intent.
Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988");

// Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
// Make the Intent explicit by setting the Google Maps package
mapIntent.setPackage("com.google.android.apps.maps");

// Attempt to start an activity that can handle the Intent
startActivity(mapIntent);