如何在 android 中发送有关我的位置地址的短信

How to send sms about my location address in android

我是 android 技术的新手。就在我开始学习前一周。我正在尝试使用我注册的手机号码发送有关我的位置的详细信息。它仅在 SONY 移动设备上运行良好。谁能帮我。这是我正在使用的代码。

private void SendSMsandGeocoder() {



    Geocoder ageocoder=new Geocoder(myContext);
    try {
        TelephonyManager atele=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
        String adata=atele.getDeviceId();

        AccountManager AAcm=AccountManager.get(myContext);
        Account[] aAccarray=AAcm.getAccounts();
        Log.e("account manager",aAccarray.toString());
        for (Account ac : aAccarray) {
            String acname = ac.name;
            String actype = ac.type;
            Log.e("acname",acname);
            Log.e("actype", actype);
            Log.e("account details",acname+actype);
            myAcnameget= acname;
        }


        double mySourcelat =mygpsclass.Findlatitude();
        double mySourcelng =mygpsclass.FindLongitude();
        Log.e("Gps cordinates", mySourcelat+","+mySourcelng);
        List<Address> aList=ageocoder.getFromLocation(mySourcelat, mySourcelng, 2);
        String aPlacename=aList.get(0).getLocality();
        Log.e("location name",aPlacename);
        String aSublocality=aList.get(0).getSubLocality();
        Log.e("Sub locality",aSublocality);
        String mySourceplace=mySourcelat+","+mySourcelng;
        String aaddress=aList.get(0).getFeatureName();
        Log.e("feature name",aaddress);

        String aaddress1=aList.get(0).getPostalCode();
        Log.e("through fare",aaddress1);
        String aAddressfull=aSublocality+","+aaddress+","+aPlacename+","+aaddress1;
        String aSendmsgcontent="The User Of the IMEI no:"+adata+" was in Co-ordinates:" +mySourceplace+" and their address was "+aAddressfull+","+  myAcnameget;
        Log.e("Full address With msg", aSendmsgcontent);
        myHashmap=myDbclass.GetConDetails();
        myCon1=myHashmap.get("Contact1");
        Log.e("Contact 1",myCon1);
        myCon2=myHashmap.get("Contact2");
        Log.e("Contact 2",myCon2);
        myCon3=myHashmap.get("Contact3");
        Log.e("Contact 3",myCon3);
        myCon4=myHashmap.get("Contact4");
        Log.e("Contact 4",myCon4);
        myCon5=myHashmap.get("Contact5");
        Log.e("Contact 5",myCon5);
        SmsManager aSms=SmsManager.getDefault();
        aSms.sendTextMessage(myCon1, null,aSendmsgcontent, null, null);
        aSms.sendTextMessage(myCon2, null,aSendmsgcontent, null, null);
        aSms.sendTextMessage(myCon3, null,aSendmsgcontent, null, null);
        aSms.sendTextMessage(myCon4, null,aSendmsgcontent, null, null);
        aSms.sendTextMessage(myCon5, null,aSendmsgcontent, null, null); 
    } catch (Exception e) {
        Log.e("sms", e.toString());
    }
}

@ARAVIND RAJ 很简单

在你的manifest.xml中添加

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.SEND_SMS" />

将此添加到您的 java

GPSTracker gpsTracker = new GPSTracker(this);
String temp;

        if (gpsTracker.canGetLocation())
        {
            String stringLatitude = String.valueOf(gpsTracker.latitude);

            String stringLongitude = String.valueOf(gpsTracker.longitude);

            String country = gpsTracker.getCountryName(this);

            String city = gpsTracker.getLocality(this);

            String postalCode = gpsTracker.getPostalCode(this);

            String addressLine = gpsTracker.getAddressLine(this);

            temp = stringLatitude + " " + stringLongitude ;
        }
        else
        {
            // can't get location
            // GPS or Network is not enabled
            // Ask user to enable GPS/network in settings

        }
    }


String phoneNo = "123243444" ;// put yout phone number here

     try {      
    SmsManager smsManager = SmsManager.getDefault();
    smsManager.sendTextMessage(phoneNo, null, temp, null, null);    
    Toast.makeText(getApplicationContext(), "Message Sent",
       Toast.LENGTH_LONG).show();
     } catch (Exception ex) {

    ex.printStackTrace();
     } 

制作一个class文件如下

public class GPSTracker extends Service implements LocationListener
{
    private final Context mContext;

    //flag for GPS Status
    boolean isGPSEnabled = false;

    //flag for network status
    boolean isNetworkEnabled = false;

    boolean canGetLocation = false;

    Location location;
    double latitude;
    double longitude;

    //The minimum distance to change updates in metters
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; //10 metters

    //The minimum time beetwen updates in milliseconds
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute

    //Declaring a Location Manager
    protected LocationManager locationManager;

    public GPSTracker(Context context) 
    {
        this.mContext = context;
        getLocation();
    }

    public Location getLocation()
    {
        try
        {
            locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);

            //getting GPS status
            isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

            //getting network status
            isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled)
            {
                // no network provider is enabled
            }
            else
            {
                this.canGetLocation = true;

                //First get location from Network Provider
                if (isNetworkEnabled)
                {
                    locationManager.requestLocationUpdates(
                            LocationManager.NETWORK_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

                    Log.d("Network", "Network");

                    if (locationManager != null)
                    {
                        location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                        updateGPSCoordinates();
                    }
                }

                //if GPS Enabled get lat/long using GPS Services
                if (isGPSEnabled)
                {
                    if (location == null)
                    {
                        locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

                        Log.d("GPS Enabled", "GPS Enabled");

                        if (locationManager != null)
                        {
                            location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                            updateGPSCoordinates();
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            //e.printStackTrace();
            Log.e("Error : Location", "Impossible to connect to LocationManager", e);
        }

        return location;
    }

    public void updateGPSCoordinates()
    {
        if (location != null)
        {
            latitude = location.getLatitude();
            longitude = location.getLongitude();
        }
    }

    /**
     * Stop using GPS listener
     * Calling this function will stop using GPS in your app
     */

    public void stopUsingGPS()
    {
        if (locationManager != null)
        {
            locationManager.removeUpdates(GPSTracker.this);
        }
    }

    /**
     * Function to get latitude
     */
    public double getLatitude()
    {
        if (location != null)
        {
            latitude = location.getLatitude();
        }

        return latitude;
    }

    /**
     * Function to get longitude
     */
    public double getLongitude()
    {
        if (location != null)
        {
            longitude = location.getLongitude();
        }

        return longitude;
    }

    /**
     * Function to check GPS/wifi enabled
     */
    public boolean canGetLocation()
    {
        return this.canGetLocation;
    }


    /**
     * Get list of address by latitude and longitude
     * @return null or List<Address>
     */
    public List<Address> getGeocoderAddress(Context context)
    {
        if (location != null)
        {
            Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
            try 
            {
                List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
                return addresses;
            } 
            catch (IOException e) 
            {
                //e.printStackTrace();
                Log.e("Error : Geocoder", "Impossible to connect to Geocoder", e);
            }
        }

        return null;
    }

    /**
     * Try to get AddressLine
     * @return null or addressLine
     */
    public String getAddressLine(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            String addressLine = address.getAddressLine(0);

            return addressLine;
        }
        else
        {
            return null;
        }
    }

    /**
     * Try to get Locality
     * @return null or locality
     */
    public String getLocality(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            String locality = address.getLocality();

            return locality;
        }
        else
        {
            return null;
        }
    }

    /**
     * Try to get Postal Code
     * @return null or postalCode
     */
    public String getPostalCode(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            String postalCode = address.getPostalCode();

            return postalCode;
        }
        else
        {
            return null;
        }
    }

    /**
     * Try to get CountryName
     * @return null or postalCode
     */
    public String getCountryName(Context context)
    {
        List<Address> addresses = getGeocoderAddress(context);
        if (addresses != null && addresses.size() > 0)
        {
            Address address = addresses.get(0);
            String countryName = address.getCountryName();

            return countryName;
        }
        else
        {
            return null;
        }
    }

    @Override
    public void onLocationChanged(Location location) 
    {   
    }

    @Override
    public void onProviderDisabled(String provider) 
    {   
    }

    @Override
    public void onProviderEnabled(String provider) 
    {   
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) 
    {   
    }

    @Override
    public IBinder onBind(Intent intent) 
    {
        return null;
    }
}

终于找到错误了。我注释掉了这两行:

// String aaddress1=aList.get(0).getPostalCode();
// Log.e("through fare",aaddress1);

我的代码现在可以正常工作了。非常感谢@Ajeet。